Autor Zpráva
Jaffoo
Profil
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
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
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
Nie, samozrejme pri zalozeni temy moze uzivatel zadat prvy prispevok, tento select je len pre vypis tem to preto :)
Tori
Profil
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
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

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: