Ongelmani näyttää tällä kertaa tältä:
Tauluni ovat tämän näköiset (esimerkkitauluja):
Kayttajat -------------------- ID(auto_increment) Nimi Viestit -------------------- ID(auto_increment) AiheID Nimi KayttajaID Aika Aiheet -------------------- ID(auto_increment) Nimi FoorumiID Foorumit -------------------- ID(auto_increment) Nimi
Kyseisistä tauluista select kyselyllä pitäisi saada vastaukseksi nämä kentät:
AiheID(solved), AiheNimi(solved), ViestienMaara(solved), Aiheen_aloittaja, Viimeisin_viesti_lahettaja, Viimeisin_viesti_aika(solved)
Tällä hetkellä kyselyni näyttää tältä (hakee dataa vasta kahdesta taulusta, kolmen sijaan):
SELECT Aiheet.ID as AiheID, Aiheet.Nimi as AiheNimi, count(*) as ViestienMaara, max(Viestit.Aika) as Viimeisin_viesti_aika FROM Aiheet,Viestit WHERE Aiheet.FoorumiID=jokuidvaan and Viestit.AiheID = Aiheet.ID GROUP BY Aiheet.ID
Vaikeintahan tässä luulisi olevan tuon käyttäjän nimen hakeminen, enkä ole ollenkaan varma onnistuuko vain yhdellä kyselyllä. Siinä kun pitää ensin hakea kayttajaID "Viestit" taulusta, jonka jälkeen vielä kolmannesta taulusta "Kayttajat" se käyttäjänimi.
Kiitos vastauksista jo etukäteen!
Voi sitä parikin kyselyä tehdä :)
Aloittaja ja lopettaja on tosiaan helpointa hakea erillisellä kyselyllä viestitaulusta (WHERE AiheID = ? ORDER BY Aika ASC/DESC LIMIT 1).
Metabolix kirjoitti:
Aloittaja ja lopettaja on tosiaan helpointa hakea erillisellä kyselyllä viestitaulusta (WHERE AiheID = ? ORDER BY Aika ASC/DESC LIMIT 1).
Juu juu. Ei tuon tekeminen ole minkään tason ongelma. Huono puoli tuossa menettelyssä on vain se, että jos jokaisella sivulla näytetään esim. 30 aihetta joudutaan kyselyjäkin tekemään 30. Se että kyselyjen määrä ei saa kasvaa datan kanssa ei kuitenkaan taida olla mysql:n nyrkkisääntö, vai? ;) Mutta jos yhdellä kyselyllä ei onnistu niin eipä sitten.
Täytyy huomioida se että foorumi toimii vain esimerkkinä vastaavaan ongelmaani.
No siis eikö tää nyt ole täysin triviaali peruskysely..
SELECT R.AiheID, R.AiheNimi, R.ViestienMäärä, VK.Nimi Aiheen_Aloittaja, UK.Nimi Viimeisin_viesti_lähettäjä, UV.Aika Viimeisin_viesti_aika FROM ( SELECT A.Id AiheID, A.Nimi AiheNimi, COUNT(V.ID) ViestienMäärä, Max(V.ID) Uusin, Min(V.ID) Vanhin FROM Viestit V JOIN Aiheet A ON A.ID=V.AiheID WHERE A.FoorumiID=1 GROUP BY A.Id, A.Nimi ) R JOIN Viestit UV ON UV.ID=R.Uusin JOIN Kayttajat UK ON UK.ID=UV.KayttajaID JOIN Viestit VV ON VV.ID=R.Vanhin JOIN Kayttajat VK ON VK.ID=VV.KayttajaID
Grez kirjoitti:
No siis eikö tää nyt ole täysin triviaali peruskysely..
Voihan sen näinkin ottaa :).
Ymmärsin kuitenkin kyselyn rakenteen ja osaan jatkossa tehdä saman itse, joten kiitoksia vielä kerran.
Aihe on jo aika vanha, joten et voi enää vastata siihen.