Autor | Zpráva | ||
---|---|---|---|
pavel z Profil |
#1 · Zasláno: 30. 3. 2006, 22:24:05
Ahoj, v mysql potřebuju spojit tabulku se články s tabulkou komentářů, spočítat je a spojit s tabulkou komentare_read (read je v past participle), kde je ke každému článku a uživateli uložen timestamp posledního shlédnutého komentáře, a to celé spojit se stejnou tabulkou "komentáře", která má v podmínce dříve vybraný timestamp posledního shlédnutého komentáře.
clanky: | id_clanek | nazev | ... | komentare: | id_komentar | id_clanek | timestamp | ... | komentare_read: | id_clanek | stamp_read |
Problém tkví asi v tom, že k tabulce 'clanky' připojuji dvakrát stenou tabulku 'komentare', ikdyž má jinou podmínku. Při zakomentování řádků A totiž korektně funguje zobrazení nových a při zakomentování řádků B zase zobrazení všech. K řešení by možná mohly vést čísla, která se vypíší při odkomentování všech řádků. Snad zná někdo řešení tohoto problému z hlavy, ale jestli ne, tak jsem pro vás (a než jsem propadl beznaději i pro sebe) napsal simulační zjednodušený skript, který můžete odladit. http://www.gjk.wjake.com/upload/dva-joiny-na-jednu-tbl.php.txt |
||
Kajman_ Profil * |
#2 · Zasláno: 30. 3. 2006, 23:12:34
S tou tabulkou komentare to stačí spojit přeci jen jednou.
SELECT cl.id_clanek, cl.nazev, kread.stamp_read ,count(k.id_clanek) AS koment_pocet ,ifnull(sum(k.timestamp > kread.stamp_read),0) AS koment_nove FROM clanky cl LEFT JOIN komentare_read kread ON kread.id_clanek = cl.id_clanek AND kread.clovek = 'pavel' LEFT JOIN komentare k USING(id_clanek) GROUP BY cl.id_clanek |
||
pavel z Profil |
#3 · Zasláno: 31. 3. 2006, 15:40:43
Opravdu moc děkuji, funguje to přesně jak má. Vůbec jsem nevěděl, že se dá tímto způsobem napsat podmínka i do SELECTu, asi bych si měl přečíst manuál k MySQL, ale je na mě příliš dlouhý, nesrozumitelný a polovinu toho už znam.
Ještě, možná je lepší nechat tam ten NULL, protože nových komentářů může být i nula, kdežto NULL, jsou vlastně nové všechny - tohle jde ale ošetřit přes PHP, jestli je smysluplné číslo v poli stamp_read. Ještě jednou díky, Pavel |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0