2016-05-03 3 views
0

Ich habe eine Tabelle namens "Vermutungen", die Menschen rät, ob ein Baby ein Junge oder ein Mädchen ist. Das sind die zwei möglichen Dinge in der „Sex“ Spalte (dh „Junge“ oder „Mädchen).Warum scheint COUNT (CASE WHEN ...) den vollständigen Abruf von MYSQL-Abfragen zu stoppen?

Es gibt 4 Vermutungen in der Tabelle für diesen PoolID. Also, wenn ich diesen Code unten laufen ...

$sql = "SELECT 
    FROM guesses 
    WHERE poolid = '$poolid' 
    ORDER BY $sort, createddate"; 
     $getguesses = mysqli_query($connection, $sql); 
     if (!$getguesses) { 
     die("Database query failed: " . mysqli_error($connection)); 
     } else { 
      //Get total number of guesses 
      $numguesses=mysqli_num_rows($getguesses); 
      echo "NUMGUESSES: $numguesses"; 
       while ($row = mysqli_fetch_array($getguesses)) { 
//code to grab other info about guesses, not relevant, works fine 
       } 
     } 

Es gibt

NUMGUESSES: 4 

Und auch 4 Zeilen ausspuckt (eine für jede Vermutung) mit anderen Informationen, die nicht relevant ist.

ich möchte die Gesamtzahl zählen von Mädchen Vermutungen vs Junge Vermutungen, f oder später in einem Kreisdiagramm verwenden. Also habe ich die folgende ...

$sql = "SELECT *, COUNT(CASE WHEN `sex` = 'girl' then 1 ELSE NULL END) as 'totalgirls', COUNT(CASE WHEN `sex` = 'boy' then 1 ELSE NULL END) as 'totalboys' 
    FROM guesses 
    WHERE poolid = '$poolid' 
    ORDER BY $sort, createddate"; 
     $getguesses = mysqli_query($connection, $sql); 
     if (!$getguesses) { 
     die("Database query failed: " . mysqli_error($connection)); 
     } else { 
      //Get total number of guesses 
      $numguesses=mysqli_num_rows($getguesses); 
      echo "NUMGUESSES: $numguesses"; 
       while ($row = mysqli_fetch_array($getguesses)) { 
         echo "GIRLS:". $row['totalgirls']; 
         echo "BOYS:". $row['totalboys']; 
       //code to grab other info about guesses, not relevant 
       } 
     } 

Diese gibt

NUMGUESSES: 1 
GIRLS: 4 
BOYS: 0 

Und auch spuckt nur eine Linie (für nur eine der vier bestehenden Vermutungen)

Alle vier Vermutungen Mädchen , also sind die GIRLS total und die BOYS total korrekt. Aber warum sieht NUMGUESSES jetzt nur als 1? Es sollte 4 sein und sollte 4 Zeilen von Schätzungen zeigen.

Etwas mit dem COUNT() wirft etwas ab. Irgendwelche Ideen?

Antwort

1

Sie fragen mysql zu zählen, also gibt es eine Zeile aus;) Versuchen Sie stattdessen:

$sql = "SELECT COUNT(*), SUM(CASE WHEN `sex` = 'girl' then 1 ELSE 0 END) as..... 

Hüten Sie sich vor, einschließlich NULL-Werte in einer Zählung!

+0

Danke, leider hat das nicht funktioniert, nur ausgegeben NUMGUESSES: 1, GIRLS: 4, BOYS: 4 und nur eine Zeile wieder – user3304303

+0

Die Variable $ numguesses zählt die Anzahl der Zeilen in Ihrem Recordset, es wird immer 1 sein! Und da du ein COUNT spielst, wird nur eine Zeile erwartet ... was würden die anderen Zeilen enthalten? – Webomatik

+0

Entschuldigung, ich verstehe nicht, warum Sie sagen, dass es immer 1 ist. Wenn Sie COUNT in einer Abfrage verwenden, sind die Ergebnisse immer 1 Zeile, egal was? Würde ich dann gezwungen sein, zwei separate SQL-Abfragen zu machen (1, die alle Informationen in so vielen Zeilen erhält, wie sie vorhanden sind, und 1, um die Zählung durchzuführen)? Ich dachte wirklich, du könntest sie beide in der gleichen Frage tun, aber ich muss mich irren. – user3304303

Verwandte Themen