[mysql] Podwójne zapytanie

0

Robie forum i napotkałem na jeden problem - aby zliczyć ile jest postów w danej kategorii. Mama taką strukturę :

Tabela Kategorie
Tabela Tematy ( posiadają id_categori)
Tabela Postow ( posiadają id_tematu)

Jak teraz połączyć zapytanie tak by sprawdzić ile w danej kategorii jest postów?

coś w stylu :

select * form tematy where kategoria=1
+
select count(id) form posty where temat_id=$temat_id
0

SELECT COUNT(posty.id) FROM fora LEFT JOIN tematy ON(fora.id=tematy.id_forum) LEFT JOIN posty ON(tematy.id=posty.id_tematu) ORDER BY fora.id

Pisane z pamięci, może nie działać :)

0
select count(posty.id) from posty, tematy
where post.kategoria = tematy.kategoria
group by post.kategoria

a nie jakieśtam joiny

0

Zrobiłem takie coś:

select count(*) FROM forum_post,forum_topic WHERE  forum_post.topic_id = forum_topic.id and forum_topic.cat_id='.$val['id']

Która metoda jest wydajniejsza?

W tej powyższej nie widze gdzie miałbym wskazać id kategorii w której che wyszukać ile jest postów

0
Adam.Pilorz napisał(a)

SELECT COUNT(posty.id) FROM fora LEFT JOIN tematy ON(fora.id=tematy.id_forum) LEFT JOIN posty ON(tematy.id=posty.id_tematu) ORDER BY fora.id

Pisane z pamięci, może nie działać :)

No wlasnie, bo chyba w mysql'u to nie zadziala. W MsSQL'u i owszem. Natomiast w tym pierwszym chyba powinno byc tak:

SELECT COUNT(posty.id) FROM fora LEFT JOIN (tematy, posty) ON(fora.id=tematy.id_forum AND tematy.id=posty.id_tematu) ORDER BY fora.id

Ale tez sie moge mylic :D

0

@ŁF: kwestia użycia JOIN/WHERE z warunkiem łączenia jest dyskusyjna. Jedni twierdzą, że jedna metoda jest wydajniejsza, inni, że druga. Nie chcę się spierać, bo ekspertem w tej dziedzinie nie jestem.

@maniek: szczerze powiedziawszy pierwszy raz widzę takie rozwiązanie. Samemu z powodzeniem w MySQL'u używam JOIN tabela ON(warunek) JOIN tablela2 ON(warunek2) itd.

@shivanwk: Podana przeze mnie i przez ŁF metoda zwraca Ci ilości postów dla wszystkich kategorii (osobno dla każdej). Podstawowa zasada oszczędności to ograniczać ilość zapytań. Jeśli zamierzasz w pętli dla każdej kategorii wykonywać takie zapytanie, to zmień sposób działania na bazie, bo zajmie Ci to o wieki więcej czasu. Jeśli potrzebujesz tylko dla jednej, to dodajesz warunek WHERE fora.id=''.$id'', czy jak tam masz to nazwane.

//Dopisane:
ŁF: Mam wrażenie, że w tym Twoim WHERE powinno być coś w stylu posty.temat=tematy.id, bo nie masz kategorii/subforum dla każdego posta podanej.

// whatever, bo w sumie chodzi o podpowiedź a nie gotowe zapytanie - Ł

1 użytkowników online, w tym zalogowanych: 0, gości: 1