Autor Zpráva
Mav3rick
Profil *
Ahoj, mám znovu problém se složeným příkazem. Tentokrát ješte o trochu složitějším. Tímto bych také chtěl požádat o nějaký seriál zabývající se touto problematikou, zkoušel jsem seriál na linuxsoftu o SQl celkově, ale nejsou tam nikde řešené podobné problémy. Potřeboval bych zvolit všechny categories_title a alias, ve stromové struktuře kategorií. Pro názornost: kategorie -> automobily -> škoda -> octavia (u child prvků, kdy některé jsou i parenty, jsou zadány parent_id, které jsou vázány na id předků..) zde je můj kód s PHP fcí, která by to měla řešit, ale nedokážu vytvořit kvalitní SQL dotaz, proto zárověň žádám i o ten seriál. Abych to ještě upřesnil potřebuji vytvořit něco přesně takového: kategorie -> automobily -> škoda -> octavia
díky za trpělivost
Alphard
Profil
Četl jste článek o stromových strukturách na intervalu?
Vy používáte ten klasický přístup id - parentid, tam nejde cestu získat jinak než rekurzí.

Kdybyste se rozhodl pro traverzování kolem stromu, tak praxe je popsaná na Traverzování kolem stromu prakticky.
TomášK
Profil
Používáte-li databázi, která podporuje rekurzivní dotazy, pak to lze řešit i při současné struktuře. MySQL to neumí.
Mav3rick
Profil *
Alphard:
Chtěl jsem se právě vyhnout vícero dotazů na databázi, což však s rekurzí nebude možné. Články jsou přínosné, každopádně nad traverzováním se budu muset ještě zamyslet, jak to udělat u mého konkrétního příkladu.
TomášK:
Bohužel používám MySQL
Mav3rick
Profil *
Nakonec jsem se rozhodl zůstat u svého řešení, ač možná není ideální, pro mé použití plně dostačuje. Jen bych Vás poprosil, kdybyste mi dotaz přespsali do použitelné formy. Nevím proč, ale nefunguje. Potřebuji získat všechny názvy a aliasy uzlů po cestě.
SELECT categories_title,categories_alias FROM categories WHERE categories_id IN
(SELECT categories_parent,categories_alias AS categories_alias.1,categories_title AS categories_title.1, FROM categories WHERE categories_id IN
(SELECT categories_parent,categories_alias AS categories_alias.2,categories_title AS categories_title.2, FROM categories WHERE categories_id IN
(SELECT categories_parent,categories_alias AS categories_alias.3,categories_title AS categories_title.3, FROM categories WHERE categories_alias =octavia)))


chyba:
Invalid resource identifier passed to get_row() function. 

Díky moc

Zárověň bych Vás chtěl poprosit ještě o jedno. Mám tu dotaz pro výběr inzerátů podle filtrování (cena, oblast apod.), ale opět ho nejsem schopný odladit. Už studuji seriál o SQL, ale ještě jsem se nedostal do kapitol, kde bych se naučil, řešit podobné věci. Bohužel mě v tomto případě tlačí čas (jako vždy ostatně). Předem díky
SELECT adverts_title,adverts_price,LEFT(adverts_desc,350) AS adverts_desc,locates_title,images_patch_1 
FROM adverts JOIN locates ON adverts.adverts_loc = locates.locates_id JOIN images ON adverts.adverts_image = images.images_id 
WHERE adverts.adverts_cat = 16 AND adverts.adverts_type = all AND adverts.adverts_price <= 2600 
ORDER BY added desc 
Kajman_
Profil *
1) Zkuste nepoužívat tečku v aliasech.
2) Není all string? Pak má být v apostrofech.

A v obou případech si vypište mysql chybu (mysql_error)!
Mav3rick
Profil *
Nepoužívání tečky ničemu nepomohlo. Chyba prvního dotazu je v příspěvku #5. Chyba druhého je:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AND adverts.adverts_price <= 2600 ORDER BY adverts.added desc' at line 5

Nevím si s tím rady. Díky
TomášK
Profil
2) Není all string? Pak má být v apostrofech.
Dle chybové hlášky má Kajman pravdu.
Kajman_
Profil *
A ta první chyba možná znamená to, že je nutné použití
`jedensloupec` in (select `pouzejedensloupec` from ...)

a ne tam cpát sloupce dva, pokud nejsou dva i před in v row zápisu.

A také platí to, že stringy (octavia) se dávají do apostrofů.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0