Kleines Problem mit SQL Abfrage
steffen
- datenbank
0 Ilja0 Andreas Dölling
Guten Morgen Forumleser,
möchte ein kleines PM System basteln.
Dazu habe ich neber Tabelle 'user' die tabelle 'pm' angelegt die wiefolgt ausschaut:
CREATE TABLE pm (
ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
User_ID INT,
User text,
Message text,
Betreff text,
Datum date,
Status INT);
Jetzt möchte ic eine Anzeige machen mit Posteingang ( 2 / 10 ). Dies mache ich mit (wenn Status den wert "1" hat gilt dies als ungelesen):
$result=mysql_query("SELECT Punktestand, COUNT(pm.User_ID) AS Anzahl, SUM(pm.Status) AS Gelesen FROM user, pm WHERE Nick="".$_SESSION['nick']."" AND pm.User_ID=user.ID GROUP BY Punktestand");
(Punktestand verwende ich an einer anderen Stelle deshalb brauche ich dies.)
Klappt auch fast wunderbar, ausser es ist keine Nachricht vorhanden (was auch logisch ist). Kann ich das irgendwie anders lösen, dass auch wenn kein eintrag in der Tabelle 'pm' vorhanden ist er trotzdem eine Ausgabe bringt(eine leere oder einfach das 0 darin steht) oder muss ich wirklich 2 Abfragen machen?
Danke für eure Hilfe :)
mfg steffen
yo,
so richtig habe ich dein ziel noch nicht verstanden. versuch die dinge am besten so zu erklären, so dass man es ohne dein vorwissen verstehen kann. zum beispiel habe wir keine ahnung davon, wie die tabelle user aussieht.
$result=mysql_query("SELECT Punktestand, COUNT(pm.User_ID) AS Anzahl, SUM(pm.Status) AS Gelesen FROM user, pm WHERE Nick="".$_SESSION['nick']."" AND pm.User_ID=user.ID GROUP BY Punktestand");
bitte gebe nur die sql anweisung an, ohne irgendwelchen schnick-schnack von php oder anderen script-sprachen. das erleichtert das fokusieren auf das eigentliche problem.
Kann ich das irgendwie anders lösen, dass auch wenn kein eintrag in der Tabelle 'pm' vorhanden ist er trotzdem eine Ausgabe bringt(eine leere oder einfach das 0 darin steht) oder muss ich wirklich 2 Abfragen machen?
du benutzt einen INNER JOIN, deshalb bekommst du keine datensätze, wenn es bei dem JOIN zu keinen treffern der beiden tabellen kommt. was du tun kannst ist einen LEFT JOIN einzusetzen.
SELECT Punktestand, COUNT(pm.User_ID) AS Anzahl, SUM(pm.Status) AS Gelesen
FROM user LEFT JOIN pm ON (pm.User_ID=user.ID)
WHERE Nick= 'nickname'
GROUP BY Punktestand
Ilja
Hallo,
Klappt auch fast wunderbar, ausser es ist keine Nachricht vorhanden (was auch logisch ist). Kann ich das irgendwie anders lösen, dass auch wenn kein eintrag in der Tabelle 'pm' vorhanden ist er trotzdem eine Ausgabe bringt(eine leere oder einfach das 0 darin steht) oder muss ich wirklich 2 Abfragen machen?
hört sich für mich nach einem klassischen Fall für den Einsatz von LEFT JOIN an (http://www.keithjbrown.co.uk/vworks/mysql/mysql_p5.shtml).
Ciao,
Andreas