MySQL Daten auch ohne Spieler ausgeben

FleyerShaver

Well-known member
ID: 316371
L
3 April 2008
1.083
62
Hi,
ich habe gerade folgenden Code vor mir:
PHP:
$result=$thDb->query("SELECT
 t.ID AS ID, COUNT(s.spieler) AS Spieler, t.SmallBlind AS SmallBlind
 FROM {$dbpre}tische t
  INNER JOIN {$dbpre}spieler s ON s.Tisch=t.ID
 GROUP BY t.ID
 ORDER BY SmallBlind DESC, Spieler ASC;");
Dieser stammt von einem Pokerscript. Allerdings werden die Spieler nur angezeigt, wenn sie auch eingeloggt sind. wie kann ich es ändern, dass die Tische auch angezeigt werden, wenn die Spielerzahl 0 ist?
 
so müsste es passen:


PHP:
SELECT
 t.ID AS ID, t.SmallBlind As smallblind,SpielerAnzahl, 
 FROM {$dbpre}tische t

  LEFT JOIN
( SELECT  s.Tisch, count(*) as SpielerAnzahl 
FROM {$dbpre}spieler s 
GROUP BY s.Tisch ) s

ON s.Tisch=t.ID
 ORDER BY SmallBlind DESC, SpielerAnzahl ASC;
 
Zuletzt bearbeitet:
Danke schonmal für deine Hilfe. Ich habe den Code jetzt eingebaut und folgendes kommt dabei raus:
Fehler bei Datenbankabfrage SELECT t.ID AS ID, t.SmallBlind As smallblind,SpielerAnzahl, FROM vms_tische t LEFT JOIN(SELECT s.Tisch, count(*) as SpielerAnzahl FROM vms_spieler s GROUP BY s.Tisch)s ON s.Tisch=t.ID ORDER BY SmallBlind DESC, SpielerAnzahl ASC; You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM vms_tische t LEFT JOIN(SELECT s.Tisch, count(*) as SpielerAnzahl FROM vms_s' at line 3
 
ups, da ist mir ein Komma zwischen "Spieleranzahl" und "FROM" reingerutscht. Versuchs mal ohne dem.



Sollte mySQL diesen nested table nicht verstehen, dann kannst Du auch das mal probieren:

PHP:
SELECT
t.ID AS TischID, 
t.SmallBlind As smallblind,
sum( CASE WHEN s.Tisch IS NULL then 0 ELSE 1 END CASE ) As SpielerAnzahl

FROM vms_tische t
LEFT JOIN
vms_spieler s 
ON s.Tisch=t.ID

Group by t.id,t.SmallBlind 
 ORDER BY SmallBlind DESC, SpielerAnzahl ASC;
 
Zuletzt bearbeitet:
Das war auch mein erster Gedanke ( ersetze INNER JOIN durch LEFT JOIN ),

allerdings weiss ich nicht, wie mySQL auf einen COUNT(spieler) reagiert, wenn da <NULL> drin steht. Ob da nicht am Ende noch der Wert 1 rauskommt.
Darum habe ich in der zweiten Query auch das Konstrukt mit dem CASE gewählt.

DB2 for z/OS z.B. reagiert unterschiedlich auf einen
COUNT(*),
COUNT(spieler) und
COUNT(DISTINCT spieler)
 
Zuletzt bearbeitet:
Danke für die Klarstellung paddya.

Kommt als Ergebnis des COUNT(column) dann eigentlich 0 oder <NULL> raus,
wenn column immer den Wert <NULL> enthält ?