Satır numarasını ekleyerek ve COUNT kullanarak toplam görüntüleme (PHP MySQL)

2 Cevap php

Ben bir sınıf içinde deneklerin toplam sayısı kadar ekler bir sorgu çalıştırmak için çalışılıyor. A sınıfı birçok konu vardır. Öğretmenler (kullanıcı tablo) ve sınıflar arasında bir 'teachersclasses' tablo yok. Prensipleri oldukça basit geliyor ama benim sayfa (doğrudan öğretmen ile ilişkili) her sınıf için denek sayısını görüntülemek için almak bazı sorun yaşıyorum

Bu bir iç içe SELECT COUNT faydalanmak için çalışıyorum, bugüne kadar ne var:

SELECT (SELECT count(*) FROM subjects WHERE subjects.classid = class.classid) AS total_subjects, class.classname, class.classid 

Sınıf DAN

Sonra bir süre döngü içinde toplam sunmak için 'NUM_SUBJECTS' up arıyorum:

            <?php echo $row['total_subjects']?>

(... Bit: döngü bir öğretmen ile ilgili tüm sınıfların döndüren, artık çalışmaz iken yukarıda, ben bir sınıf için toplam konuları alıyorum, ama aynı tablo satır içinde (bir sınıf için) ve benim diğer şimdi bir karmaşa!

Belirli bir öğretmen için sınıfları dönmek için biliyorum, ben yapabilirim ek WHERE 'teacherid' bir oturumda fıkra ama benim sorgu hataları her yerde patlıyor ki benim için çok karmaşık oluyor düşünüyorum. Herkes bunun için hızlı bir düzeltme var! Çok teşekkürler

2 Cevap

Sorgunuz muhtemelen optimal değildir. Bir katılmak olarak yeniden yazmak için iyi bir fikir olabilir:

SELECT
    total_subjects,
    class.classname,
    class.classid 
FROM class
JOIN (
    SELECT classid, count(*) AS total_subjects
    FROM subjects
    GROUP BY classid
) AS T1
ON T1.classid = class.classid

Sorununuza gelince, iki döngüler gerekmez. Benim yeniden yazma açıkça gösterdiği gibi bu, üç sütun ile ayarlanmış bir tek sonucudur. Yalnızca tüm sonuçları okumak için bir döngü gerekir.

Sen "Alt Seç'i" gerekmez, sadece bir JOIN ve count() yapabilirsiniz

SELECT 
  class.*, 
  count(subjects.*) AS total_subjects 
FROM 
  class 
  LEFT JOIN subjects ON class.classid = subjects.classid
WHERE 
  class.teacherid = ?
GROUP BY
  class.classid