Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Mysql-ongelma 3 taulua

jo123 [25.07.2009 14:05:40]

#

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!

Matso [25.07.2009 14:39:25]

#

Voi sitä parikin kyselyä tehdä :)

Metabolix [25.07.2009 15:21:11]

#

Aloittaja ja lopettaja on tosiaan helpointa hakea erillisellä kyselyllä viestitaulusta (WHERE AiheID = ? ORDER BY Aika ASC/DESC LIMIT 1).

jo123 [25.07.2009 21:19:30]

#

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.

Grez [25.07.2009 21:57:17]

#

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

jo123 [25.07.2009 23:15:17]

#

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.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta