Autor | Zpráva | ||
---|---|---|---|
Marek Žouželka Profil * |
#1 · Zasláno: 20. 11. 2012, 10:10:03
Dělám si takové menší forum, mám dvě tabulky: categories a topics a celé to funguje nějak takto: Když je vybrána kategorie tak vypíšu topics kde cat_id je rovno zvolené kategorii. Když je vybráno jedno z témat, vypíšu všechny topics, kde parent je rovno id zvoléného tématu.
Vím, že ten návrh db není nejideálnější, ale už to nějakej pátek funguje skvěle. Teď je ale problém: Chci aby se topics vybrané kategorie řadili podle data těch podřazených topics. Jak na to? Doufam, že jsem to popsal tak nějak srozumitelně :-) Děkuji za odpovědi... |
||
Kajman Profil |
V současném dotaze uděláte ještě jeden left join na tu samou tabulku topics (s jiným aliasem) s podmínkou že parent=topic_id, zgroupujete to a seřadíte podle max() nad sloupcem s datumem.
Ale nepočítejte s tím, že by to bylo nad více daty svižné. |
||
juriad Profil |
#3 · Zasláno: 20. 11. 2012, 10:29:31
TABLE topics: id: INT cat_id: INT parent_id: INT added: DATE SELECT t1.*, MAX(t2.added) as last_added FROM topics t1 LEFT JOIN topics t2 ON (t2.parent_id = t1.id OR t2.id = t1.id) -- je nutne sjoinovat i sam se sebou: pokud by nemel potomky, nemel by ani last_added GROUP BY t1.id WHERE t1.cat_id = $category ORDER BY last_added |
||
Marek Žouželka Profil * |
#4 · Zasláno: 20. 11. 2012, 10:45:04 · Upravil/a: Marek Žouželka
Díky za odpovědi! Vyzkouším a dám vědět :-)
ať se snažím, jak se nažím, nemůžu to dát dohromady... když vyjdu z příspěvku juriada s tím, že tabukka vypadá takle: id: INT category: INT parent: INT date: DATETIME tak upravím dotaz následovně: SELECT t1.*, MAX(t2.date) as last_added FROM topics t1 LEFT JOIN topics t2 ON (t2.parent = t1.id OR t2.id = t1.id) GROUP BY t1.id WHERE t1.category = $category ORDER BY last_added a nefunguje to... kde dělám chybu? Díky moc ;-) nefunguje tak, že vypisuje chybu 1064... |
||
peta Profil |
http://www.dpriver.com/pp/sqlformat.htm
select Mysql, tlacitko Format t1(4,7) expected token:; ASC DESC ) , HAVING ORDER UNION MINUS INTERSECT Dotaz od juriad hlasi uplne stejnou chybu. http://localhost/phpmyadmin/ Kdyz vytvorim v phpmyadminu tabulku a dam tam sql dotaz, tak pise: #1064 - 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 'WHERE t1.category = 123 ORDER BY last_added LIMIT 0, 30' at line 4 To je dulezite uvest, chybovou hlasku a ne jen cislo chyby. Protoze se to pise opacne. Nejdriv pouzivas where a pak az grupujes, ze jo, logicke. SELECT t1 . * , MAX( t2.date ) AS last_added FROM topics t1 LEFT JOIN topics t2 ON ( t2.parent = t1.id OR t2.id = t1.id ) WHERE t1.category =123 GROUP BY t1.id ORDER BY last_added LIMIT 0 , 30 |
||
Časová prodleva: 11 let
|
0