Autor | Zpráva | ||
---|---|---|---|
Jaffoo Profil |
#1 · Zasláno: 13. 1. 2012, 17:56:25
Dobry den chcel by som Vas poziadat o pomoc s jednym selectom, mam 3 tabulky uzivatelia, temy, prispevky. a su spojene uzivatelia s temy, uzivatelia s prispevky a temy s prispevky(id z tej prvej tabulky sa vzdy prenasa do tej druhej)
Potrebujem vypisat id_temy,nadpis(temy),pocet prispevkov v teme(ak niesu ziadne tak 0), id_uzivatelia(ak niesu prispevky v teme tak id_uzivatelia z temy, ak su prispevky v teme tak id_uzivatelia posledneho prispevku) Tento select mi vypise prve tri veci bez id_uzivatelia samozrejme lebo tam neni(ale vypise to, co ma spravne) SELECT t.id_temy, t.nadpis, IFNULL( COUNT( p.id_temy ) , 0 ) AS pocet, IFNULL( MAX( p.datum ) , t.datum ) AS datum FROM temy t LEFT JOIN prispevky p ON t.id_temy = p.id_temy GROUP BY t.id_temy ORDER BY datum DESC Tento select vypise uz aj id_uzivatelia(ale pokazi sa tu pocet prispevkov v teme) SELECT t.id_temy, t.nadpis, IFNULL( COUNT( sale_tmp.id_temy ) , 0 ) AS pocet, IFNULL( MAX( sale_tmp.datum ) , t.datum ) AS datum, IFNULL( sale_tmp.id_uzivatelia, t.id_uzivatelia ) AS uzivatel FROM temy t LEFT JOIN ( SELECT p1 . * FROM prispevky AS p1 LEFT JOIN prispevky AS p2 ON p1.id_temy = p2.id_temy AND p1.datum < p2.datum WHERE p2.id_temy IS NULL ) AS sale_tmp ON ( t.id_temy = sale_tmp.id_temy ) GROUP BY t.id_temy ORDER BY datum DESC Neviete ako to dat dohromady aby to islo? pripadne je mozne to spravit z dvoch selectov a potom ked sa to bude v php prechadzat v cykle while($row_prva_cast = mysql_fetch_array($sql1) && $row_druha_cast = mysql_fetch_array($sql1) ) Vopred dakujem |
||
Jaffoo Profil |
#2 · Zasláno: 13. 1. 2012, 19:13:07
Potom ma napadlo toto riesenie, ktore selectuje presne to co mi treba:
SELECT t.id_temy, t.nadpis, IFNULL( COUNT( p.id_temy ) , 0 ) AS pocet, IFNULL( MAX( p.datum ) , t.datum ) AS datum, IFNULL( ( SELECT id_uzivatelia FROM prispevky WHERE id_prispevky = ( SELECT MAX( id_prispevky ) FROM prispevky WHERE t.id_temy = id_temy ) ) , t.id_uzivatelia ) AS uzivatel FROM temy AS t LEFT JOIN prispevky AS p ON t.id_temy = p.id_temy GROUP BY t.id_temy ORDER BY datum DESC Co mi pride asi najlepsie, kedze id_prispevky po pridani noveho prispevku k nejakej temy sa bude vzdy len zvacsovat |
||
Tori Profil |
#3 · Zasláno: 13. 1. 2012, 19:30:41
Jaffoo:
Jak máte udělané to fórum - tam se dá založit téma, aniž by člověk do ní zároveň napsal první příspěvek? (jen jsem zvědavá) |
||
Jaffoo Profil |
#4 · Zasláno: 13. 1. 2012, 19:38:05
Nie, samozrejme pri zalozeni temy moze uzivatel zadat prvy prispevok, tento select je len pre vypis tem to preto :)
|
||
Tori Profil |
#5 · Zasláno: 13. 1. 2012, 19:42:17
Jaffoo:
„moze uzivatel zadat prvy prispevok“ může nebo musí? Totiž ptám se jen proto, že mě zaujalo to IFNULL(t.id_uzivatelia, p.id_uzivatelia) , a tohle bylo jediné vysvětlení, co mě napadlo.
|
||
Jaffoo Profil |
#6 · Zasláno: 13. 1. 2012, 19:50:51 · Upravil/a: Jaffoo
Musi zadat prvy prispevok, ten
IFNULL(p.id_uzivatelia, t.id_uzivatelia) je na to aby mi vypisalo kto posledny vlozil prispevok do temy, ak nikto tak vypise uzivatela, ktory zalozil temu
|
||
Časová prodleva: 12 let
|
0