Merhabalar;
Arkadaşlar tek bir SQL sorgusu ile bazı şartları sağlayan değerleri çekmek istiyorum.
Yardımcı olabilirseniz sevinirim.
Hemen soruya geçeyim.
İki adet tablom var
haber
yorum
haber tablom
- id
- baslik
- icerik
yorum tablom
- id
- haber_id
- yorum_icerik
Bu tablolara göre 5'ten fazla yoruma sahip olan haberlerin sadece başlığını nasıl çektirebilirim?
Açıklama ben bunun uzun yolunu yapabiliyorum.
( While döngüsü ile gelen haber id'sini alıp while içinde yorum tabloma num_rows sorgusu çekiyorum ve if şartı ile 5'ten büyükse basliklarini yazdırıyorum. )
Ama bu sizde taktir edersenizi ki profesyonelce değil.
Yardımcı olan arkadaşlara şimdiden teşekkür ediyorum.
Böyle bir MySQL sorgusu nasıl yazılır?
9
●1.899
- 23-08-2013, 21:57:47
$sorgu = mysl_query("SELECT count(yorum.haber_id) as toplam,haber.baslik FROM yorum INNER JOIN haber ON yorum.haber_id = haber.id GROUP BY yorum.haber_id HAVING toplam >= 5"); while($veri = mysql_fetch_assoc($sorgu)){ echo $veri['baslik'] ."<br />"; }olması lazım - 24-08-2013, 01:18:14Bu tarz hesaplama yaparsanız sistemde çok fazla veri olmasa dahi sisteminiz yorulacaktır. Yorulmasa dahi normalde 100 ms yanıt süresi olan scriptiniz 900 ms - 1500 ms arasında bir zamanda yanıt verecektir. Bu nedenle haber tablosuna yorum adlı bir alan açarak her yorum eklendiğinde o alandaki sayıyı arttırın. Zaten sonrasını biliyorsunuzdur;
SELECT baslik FROM haber WHERE yorum > 4 LIMIT 10 - 24-08-2013, 11:47:21Üyeliği durdurulduBaşka bir yol dahaModexi adlı üyeden alıntı: mesajı görüntüle

SELECT baslik FROM haber WHERE id IN (SELECT haber_id FROM yorum GROUP BY haber_id HAVING COUNT(haber_id) > 5)
- 24-08-2013, 13:21:16ben kodu paylaştım ama belirtmeyi unuttum, daha doğrusu vaktim yoktuModexi adlı üyeden alıntı: mesajı görüntüle

kullanmanı tavsiye eder miyim?
kesinlikle hayır! çünkü bir kere grup by var işin içinde, count var, join var. bunlar küçük veritabanlarında, sistemlerde sıkıntı çıkartmazlar pek fakat işler büyüyünce veritabanı katili olurlar. mecbursan bunları kullanmaya bir defa çekip, cache yapmak en mantıklısıdır. her kullanıcı için tekrar tekrar sorgulatmak hiç mantıklı değildir.
bu konuda en mantıklı çözüm @sewakldawk ın da dediği gibi haber tablosunda yorum_sayisi bölümü oluşturup, onaylı her yorumda 1 arttırmaktır.
