Autor | Zpráva | ||
---|---|---|---|
krokoš Profil * |
#1 · Zasláno: 20. 2. 2008, 16:35:45
Čaute, snažím udělat si takové menší fórum... Vše už je hotové a funguje, ale teď bych ještě chtěl vylepšit řazení témat a odpovědí. A to tak, že ve výpisu témat bude na prvním místě téma s nejnovější odpovědí nebo téma nově založené (řazeno podle data).
takš mám dotaz SELECT * FROM temata AS t LEFT JOIN odpovedi AS o ON o.tema = t.id_tema GROUP BY t.id_tema ORDER BY o.datum DESC Ale to mi to řadí dosti prapodivně a rozhodně ne tak, jak by mělo. Takže bude třeba to nějak poupravit, aby to řadilo správně. Další problém je v tom, že pokud nemá téma odpověď, tak se nezařadí na začátek i když bude nejnovější... Lámu si tady s tím hlavu a ne a ne na to přijít. Na internetu jsem zatím nic nenašel, tak se ptám tady :( Ještě informace, že v tabulce temat je informace datum zaožení a v odpovědích datum odpovědí. Jak na to? |
||
Kajman_ Profil * |
#2 · Zasláno: 20. 2. 2008, 16:53:26
ORDER BY ifnull(max(o.datum),t.datumzalozenitematu) DESC
|
||
mitr Profil |
#3 · Zasláno: 20. 2. 2008, 16:57:17 · Upravil/a: mitr
A proč nevybírat z tabulky odpovědí seřazených podle datumu GROUP BY id tema a k tomu LEFT JOIN název tematu ?
Jinak přeci není nijak zaručeno že se k tabulce tema připojí právě ta nejnovější odpověď ne ? |
||
krokoš Profil * |
#4 · Zasláno: 20. 2. 2008, 17:00:45
mitr:
takže takhle? SELECT * FROM odpovedi AS o LEFT JOIN temata AS t ON o.tema = t.id_tema GROUP BY o.id_odpoved ORDER BY o.datum DESC |
||
mitr Profil |
#5 · Zasláno: 20. 2. 2008, 17:04:07 · Upravil/a: mitr
SELECT * FROM odpovedi AS o
LEFT JOIN temata AS t ON o.tema = t.id_tema GROUP BY o.id_tema ORDER BY o.datum DESC a taky by to chtělo místo * vybrat jen to co ptořebuješ, abys tam neměl stejné názvy sloupců víckrát ve výsledku SELECT o.neco, o.neco2, t.nazev, .... FROM odpovedi |
||
krokoš Profil * |
#6 · Zasláno: 20. 2. 2008, 17:06:57
mitr: výběr tam mám, ale nechtělo se mi to tu vypisovat, protože to myslím není zase tak podstatný :)
nicméně když to zkusím, tak to stejně nefunguje :( |
||
krokoš Profil * |
#7 · Zasláno: 20. 2. 2008, 17:20:58
řadí se to jakoby náhodně... nejnovější je až druhý od spodu, další dva jsou nahoře, pak je to ale zase různě popřehazované...
|
||
Mastodont Profil |
#8 · Zasláno: 20. 2. 2008, 17:40:05 · Upravil/a: Mastodont
Pokud budeš řadit jen podle o.datum, tak nikdy nedosáhneš to, co chceš, protože téma bez odpovědi v tabulce odpovědí žádné datum nemá.
Nejjednodušší řešení je asi přidat do tabulky téma sloupec datum_aktual, který při vytvoření tématu bude totožný s datem vytvoření a při každém přidání odpovědi spustíš kromě "INSERT INTO odpovedi .." ještě "UPDATE temata SET datum_aktual ..." Vkládání odpovědí bude trošičku zdlouhavější, ale to se asi nebude provádět tak často jako zobrazování toho seznamu témat - a pro něj se ti SELECT výrazně zjednoduší: SELECT název_tématu, datum_aktual FROM temata ORDER BY datum_aktual DESC |
||
krokoš Profil * |
#9 · Zasláno: 20. 2. 2008, 18:01:12
Mastodont, jasný, to mě taky napadlo, ale chtěl jsem to vyřešit přes ten select... Ale asi to tak bude nejjednodušší
|
||
mitr Profil |
#10 · Zasláno: 20. 2. 2008, 18:45:38
záleží jestli je tema jen název a první příspěvek v něm jako příspěvek a nebo ne :-)
|
||
Kajman_ Profil * |
krokoš
Ale asi to tak bude nejjednodušší Určitě to bude ve výsledku rychlejší, protože na tom můžete udělat index. A ten druhý příspěvek jste nezkoušel? Pokud tam potřebujete dostat např. i posledního přispívajícího, tak hledejte inspiraci zde... http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-ro w.html |
||
Časová prodleva: 16 let
|
0