=?iso-8859-2?q?[MySQL]_n_generacji_potomk=F3w_artyku=B3u?=
hekatonchejr@gmail.com - 11-05-2007 12:32
=?iso-8859-2?q?[MySQL]_n_generacji_potomk=F3w_artyku=B3u?=
Cześć,
Mam mały zgryz, może będziecie w stanie pomóc. Otóż mam w MySQL tabelę 'articles', która zawiera m.in. pola: 'id' i 'hierarchy'. id to oczywiście unsigned int z autoincrement itd. hierarchy to varchar(32) z indeksem
W hierarchy przechowuję listę 'id' artykułów nadrzędnych względem danego, oddzielonych znakiem '/'. Id są uszeregowane od najwyższego w hierarchii i przechowują jakby kolejne, zawężające się kategorie,do których należy artykuł. Z tym, że każda kategoria jest tak naprawdę artykułem przechowywanym w tej samej tabeli, nie jakimś osobnym wpisem.
Tyle wstępu. Wiem, jak skonstruować zapytanie, które poda mi
1. rodzica danego artykułu (po prostu 'WHERE hierarchy = '. $hierarchy) 2. jego bezpośrednich potomków ('WHERE hierarchy = '. $hierarchy. '/' .$id) 3. jego wszystkich potomków ('WHERE hierarchy LIKE '. $hierarchy. '/' .$id. '%')
Pomóżcie: jak skonstruować zapytanie tylko o n generacji potomków? Nie chciałbym tego robić zapytaniem nr 3 i później wycinać niepotrzebnych w tablicy wyników w PHP
-- Pozdrawiam, Hekatonchejr
Jacek - 11-05-2007 12:32
Moze select top n?
=?ISO-8859-2?Q?Pawe=B3_Matejski?= - 11-05-2007 12:32
hekatonchejr@gmail.com wrote: > Cześć, > > Mam mały zgryz, może będziecie w stanie pomóc. > Otóż mam w MySQL tabelę 'articles', która zawiera m.in. pola: 'id' i > 'hierarchy'. > id to oczywiście unsigned int z autoincrement itd. > hierarchy to varchar(32) z indeksem > > W hierarchy przechowuję listę 'id' artykułów nadrzędnych względem > danego, oddzielonych znakiem '/'. Id są uszeregowane od najwyższego w > hierarchii i przechowują jakby kolejne, zawężające się kategorie, do > których należy artykuł. Z tym, że każda kategoria jest tak naprawdę > artykułem przechowywanym w tej samej tabeli, nie jakimś osobnym > wpisem. > > > Tyle wstępu. Wiem, jak skonstruować zapytanie, które poda mi > > 1. rodzica danego artykułu (po prostu 'WHERE hierarchy = '. > $hierarchy) > 2. jego bezpośrednich potomków > ('WHERE hierarchy = '. $hierarchy. '/' .$id) > 3. jego wszystkich potomków > ('WHERE hierarchy LIKE '. $hierarchy. '/' .$id. '%') > > Pomóżcie: jak skonstruować zapytanie tylko o n generacji potomków?
To nie jest problem bazodanowy, ale zabawa na stringach funkcjami mysql'a. Możesz np. policzyć różnicę między ilością '/' w hierarchy danego artykułu a jego potomkami (znajdź odpowiednią funkcję lub ją napisz). Ale lepiej jest sprowadzić to do problemu bazodanowego, np. przy pomocy tzw. metody 5, której opis znajdziesz w FAQ albo na stronach depesza.
-- P.M.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Gdzie MySQL 4.1, a gdzie 5.0?
[MS SQL] "set names" (mySQL) w MS SQL
oracle -> oracle lub oracle -> mysql replikacja - programy
[mysql 4.0] SELECT t1.id, t1.foo FROM t1 oraz COUNT t2 w jednym zapytaniu.
[MySQL] Zwrot tego, co pasuje i nie pasuje :-/
[pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1
[mysql] galeria zdjec - numerowanie zdjec
[MySQL] Zapytanie z pliku , wynik do pliku
[mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
mysql data 0000-00-00 na koniec
zanotowane.pldoc.pisz.plpdf.pisz.pladwokat.keep.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|