Autor Zpráva
krokoš
Profil *
Č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 *
ORDER BY ifnull(max(o.datum),t.datumzalozenitematu) DESC
mitr
Profil
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 *
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
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 *
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 *
ř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
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 *
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
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

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: