Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Jak wyświetlić podkategorie z kategorii głównej?
Forum PHP.pl > Forum > Przedszkole
-mint-
cześć.
Męczę się z pewnym (pewnie dość błahym) problemem. Na poczatek kod:
  1. $qu = "SELECT * FROM links_categories WHERE id LIKE '%-$id%-%'";
  2. $res = mysql_query($qu);
  3. while($r = mysql_fetch_array($res)) {
  4. $idx = $r['id'];
  5. $titlex = $r['title'];
  6. echo 'TITLE: '.$titlex.' |'; echo '%ID:'.$id.'';
  7. }

Mniejsza o to, że to są testy, więc niepotrzebnie to podwójne echo.
Co mam, a coc chcę osiągnąc?
Mam tabelę z linkami, w której są kategorie:
001
002
003
...
020
Ale oprócz tych "głównych" kategorii, mam też podkategorie, odpowiednio:
001001
001002
002001
002002
003001
...
020001
020002
020003


Kategorie "główne" ładnie są wyświetlane (wraz z linkami do stron), lecz chcę, by wraz z wybraną kategorią pojawiły się również podkategorie do niej przypisane.
Czyli gość wchodzi do kategorii 001 i oprócz linków z tej głównej kategorii powinien widzieć odnośniki do podkategorii, czyli w tym przypadku: 001001, 001002...

Co robię źle w zapytaniu? Gdzie mam byka?
Pomóżcie proszę...


Uploaded with ImageShack.us
maniana
Wewnątrz while wykonujesz i wyświetlasz zapytanie:
  1. $qu2 = "SELECT * FROM `links_categories` WHERE `id` LIKE '%-".$id.$idx."-%'";
  2. $res2 = mysql_query($qu2);
  3. while($r2 = mysql_fetch_array($res2)) {
  4. $podkategorie .= 'TITLE: '.$r2['title'].' | %ID:'.$r2['id'].'';
  5. }

Wtedy po skończeniu pętli głównej kategorii możesz wyświetlić $podkategorie. Nie wiem w jakim formacie masz ID więc ew z nim ('%-".$id.$idx."-%') pokombinuj.
-mint-
Nie dałem rady, choć coś tam wymodziłem (ale i tak do niczego nie przydatne...).
Więc tak:
tabela links_categories ma kolumny:
id
to są właśnie kategorie (np. 001, 002, 003...) i podkategorie (np. 001001, 001002, 002001, 002002, 003001, 003002,...)
title - wiadomo
text - opis kategorii
status - chwilowo nieprzydatny, ale jak będę chciał coś "ukryć to dam np. status 9 i spreparuję odpowiednio zapytanie, by pokazywało wszystko ale bez linków o statusie 9)

Podkategorie składają się z sześciu cyfr i są określane w ten sposób, że pierwsze trzy cyfry to cyfry kategorii głównej, a trzy ostatnie to właściwa podkategoria, np:
- skoro 001 to kategoria główna, to 001001 to kategoria podrzędna (czy też podkategoria).
- skoro 020 to kategoria główna, to 020004 to jedna z podkategorii (020001,020002,020003,020004)

Po prostu tworząc ten skrypt i tabelkę nie przewidziałem paru rzeczy i tak niestety musi zostać (uwierzcie mi - nie chciałoby się raczej nikomu przerabiać jednej tabeli z prawie 2300 rekordami wink.gif )

Wracając do tego, co właściwe:
Bez kodu, który zaproponował maniana, mając tylko "goły" kod, po wejściu w daną kategorię wyświetlam normalnie echo $id; i jest ono odpowiednie do tej kategorii. Oczywiście widzę wszystkie linki z kategorii głłównej. Lecz nie widzę tego, co próbowałem z marnym skutkiem przedstawić na (ekhm) "założeniu graficznym", które zamieściłem wyżej.
Załóżmy, że w kategorii 001 mam dwie podkategorie (czyli 001001 i 001002) - niestety nie widać odnośników do tych dwóch podkategorii.

Kombinuję coś w ten deseń:
[php]
$query_ = "SELECT * FROM links_categories WHERE id='$id%-%' LIKE '%-$id%-%'";

$result_ = mysql_query($query_);
while($r_ = mysql_fetch_array($result_)){
$tid = $r_['id'];
$tit = $r_['title'];
}
ale mimo tego, że id mam w porządku to jakoś zapytanie "nie łapie", że chodzi mi o wyświetlenie trzech ostatnich cyfr z aktualnie przeglądanej kategorii.

Wiem, że to zamotane, jak ruski ogon - ale może ktoś pokojarzy...

Jak ktoś będzie miał dłuższą chwilę, to może przez gadu... 1541788

maniana
Jeśli masz ID w stylu: 001, 002, 003... 001001, 001002, 002001, 002002, 003001, 003002 ... To nei złożysz zapytania tego typu: %-$id-% bo musiałbyś mieć ID: -001-, -002-
Przeorganizuje strukturę tabeli na taką:
Cytat
id | parent_id | title | text | status

Wtedy niech id będzie dalej unikalnym numerem rekordu a parent_id będzie trzymał id rodzica... Wtedy kategorie główne będą miały parent_id równe 0.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.