PHP: bağlantılı tablolar ile MYSQL COUNT sorgu

2 Cevap php

Bunu yapmak için daha temiz bir yol arıyorum. Benim kod çalışır, ama o daha iyi olabileceğini biliyorum. Kategori grupları listesi ile bir, kategori gruplarına bağlı kategori listesi ile bir ve kategorilere bağlı olan haberlerin bir liste ile bir: Ben üç tablo var.

Ben de listelenen her kategoride haberlerin sayısı ile kategorisinde gruplar bulunmaktadır kategoriden isimleri takip, Kategori Grupların isimleri tüm döngü gerekir.

CategoryGroups, Kategoriler, Haberler: Ben üç tablo var.

Ben sorguları bir dizi var. CategoryGroups tablodan ilk sorguları tüm satırlar:

$result = mysql_query( '
SELECT cat_group_id, cat_group_name FROM CategoryGroups 
' );

İkinci sorgu ilk sorgunun döngüye sonuçları içinde ve bir haber öğesi var ve belirli bir kategori grubuna bağlı tüm kategoriler bulur:

<?php
while( $row = mysql_fetch_assoc( $result ) ){
    $id = $row['cat_group_id'];    	
    $name = $row['cat_group_name'];

echo "<h3>$name</h3>";

    $sql = 	mysql_query("
    		SELECT  category_id, title FROM `Categories`  
    		WHERE cat_group_id = $id 
    		AND category_id IN 
    		(SELECT news.category_id FROM news)
    		"); 
    while( $row = mysql_fetch_assoc($sql) ) {
    $title = $row['title'];
    $catid = $row['category_id'];
    $numbers = 	mysql_query("
    			SELECT * FROM news 
    			WHERE category_id =$catid"
    			);
    $nums = mysql_num_rows($numbers);
    echo "$title ($nums)<br/>\n";
}
?>

Aklımda verimliliği ile, bir ya da iki sorguları bu sınırlamak istiyorum. Ben bu yapılabilir biliyorum, ancak benim girişimleri başarılı olmamıştır.

teşekkürler.

2 Cevap

Ben sen gibi SQL üzerine bir kitap almak gerekiyor öneririm "SQL Queries for Mere Mortals."

$sql = mysql_query("
        SELECT  cg.cat_group_name, c.title, COUNT(n.category_id) AS NumNews
        FROM `CategoryGroups` cg 
        JOIN `Categories` c USING (cat_group_id)
        JOIN `News` n USING (category_id)
        GROUP BY cg.cat_group_name, c.title");

Sonra sonucu ve çıkışı üzerinde döngü, yeni bir <h3> her zaman cat_group_name, önceki satırdan farklı.

Neden tabloları JOIN değil?

SELECT cat_group_name, title, count(newsid)
FROM CatagoryGroups
INNER JOIN Categories ON cat_group_id
INNER JOIN News ON category_id
GROUP BY cat_group_name, title

masa haber NewSID sütunu (o lazım BAZI birincil anahtarı var, değil mi? iyi, saymak ;-) varsa o, yakın olması gerekir gibi görünüyor. Açık dizin ile oldukça hızlı olmalı Joın ve PHP kodu bundan gerekebilir biçimlendirme ne olursa olsun çıkış yapabilirsiniz.