flipse Geschrieben 12. März 2010 Teilen Geschrieben 12. März 2010 Ich habe 2 Probleme bei einer PHP Anwendung mit meinen SQL Abfragen zum Einen: Wenn ich diese SQL Abfrage ausführe funktioniert alles wunderbar, aber wenn meine Tabellen leer sind leider nicht. es muss also in der tabelle b_posts mind. 2 Einträge geben, die aufeinander referenziert sind. Warum kann er dann nicht einfach 0 ausgeben? SELECT f.parentID, f.ID, f.name, f.description, f.lastposttime, f.lastpost, f.lastpostuser, f.sort, r.read, r.write, r.edit, p.numtopics, p2.numposts FROM b_forums f LEFT JOIN ( SELECT COUNT(p.ID) As numtopics, p.postforum, p.threadparent FROM b_posts p WHERE p.threadparent ='0') p ON f.ID = p.postforum LEFT JOIN ( SELECT COUNT(p2.ID) As numposts, p2.postforum, p2.threadparent FROM b_posts p2 WHERE p2.threadparent<>'0' ) p2 ON f.ID = p2.postforum INNER JOIN rlf_forum_rights r ON f.ID = r.forumID WHERE r.roleID='0' AND r.read = '1' Order by f.sort ASC es geht dabei um ein Forum. Dies soll die Übersicht sein. Es funktioniert alles gut, wenn ich eben einen Thread habe (eintrag in b_posts mit threadparent=0) und eine antwort (eintrag in b_posts mit threadparent = b_posts ID) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. März 2010 Teilen Geschrieben 12. März 2010 Welches DBMS? Und was heißt "funktioniert nicht" !? Bitte das Problem präzise beschreiben! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flipse Geschrieben 12. März 2010 Autor Teilen Geschrieben 12. März 2010 also ich arbeite mit mysql als DBMS. Wenn alles funktioniert sieht es so aus: http://www.flipsoft24.de/images/sql.jpg Das geht aber nur wenn BEiträge vorhanden sind... Sollte jetzt die Tabelle b_posts leer sein (also quasi noch kein Beitrag vorhanden) bekomme ich einen Fehler Als Fehlermeldung bekomme ich folgendes #1048 - Column 'postforum' cannot be null Außerdem hätte ich es gerne, dass statt NULL 0 ausgegeben wird Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 12. März 2010 Teilen Geschrieben 12. März 2010 Als Fehlermeldung bekomme ich folgendes #1048 - Column 'postforum' cannot be null Ohne dass ich jetzt die konkreten Tabellenstruktur kenne, würde ich darauf tippen, dass die Spalte als "not null" deklariert ist oder Schlüsselbestandteil ist und somit nicht null sein darf. Es ist sehr schwierig Dein Statement zu verstehen ohne die komplette Struktur zu kennen, darum denke ich, dass Du entweder das Statement so verändern musst, dass das Feld eben "Null" sein darf oder Du innerhalb des Statements prüfen musst, ob Daten vorhanden sind, wobei ich hier eine entsprechende Subquery mit If erzeugen würde Außerdem hätte ich es gerne, dass statt NULL 0 ausgegeben wird MySQL :: MySQL 5.1 Referenzhandbuch :: 12.2 Ablaufsteuerungsfunktionen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flipse Geschrieben 13. März 2010 Autor Teilen Geschrieben 13. März 2010 super. ich hab jetzt null erlaubt und es funktioniert. cool...danke dir. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flipse Geschrieben 13. März 2010 Autor Teilen Geschrieben 13. März 2010 aber das mit statt NULL 0 ausgeben funktioniert nicht. kannst du mir sagen wie ich das einbauen kann? ich habe es mit IFNULL(p.numtopics,0) versucht, das gibt aber den Fehler, dass numtopics nicht mehr im abfrageergebnis ist. wenn ich es im join ändere funktionierts auch nicht, gibt aber auch keinen fehler Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flipse Geschrieben 13. März 2010 Autor Teilen Geschrieben 13. März 2010 ok jetzt funktionierts... supii Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flipse Geschrieben 13. März 2010 Autor Teilen Geschrieben 13. März 2010 Jetzt habe ich aber noch ein zweites Problem mit folgender Abfrage SELECT p.ID, p.title, p.telapsed, p.timepost, p.lastpost, p.postforum, p.value, p.locked, p.views, p2.numreplies FROM b_posts p LEFT JOIN ( SELECT COUNT(p2.ID) As numreplies, p2.threadparent FROM b_posts p2 GROUP BY p2.ID) p2 ON p.ID = p2.threadparent WHERE p.threadparent='0' AND p.postforum='3' order by p.value DESC, p.telapsed DESC limit 0, 15 Statt mir jetzt eine Zeile auszugeben, in der bei numreplies 2 steht, gibt er mir 2mal die gleiche zeile aus mit jeweils numreplies 1... das ist aber leider nicht das was ich brauche... was mach ich hier falsch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 13. März 2010 Teilen Geschrieben 13. März 2010 Statt mir jetzt eine Zeile auszugeben, in der bei numreplies 2 steht, gibt er mir 2mal die gleiche zeile aus mit jeweils numreplies 1... das ist aber leider nicht das was ich brauche... was mach ich hier falsch? Ein Join liefert anhand der Art der Verknüpfung die Datensätze, d.h. wenn Du eine 1:N Verbindung hast, dann können logischerweise mehrere Ergebnisse geliefert werden. Es ist die Frage woher mehrfache Datensätze kommen, aus der Subquery, was eigentlich das Group ausschließen sollte, sofern p2.id unique ist oder aus dem left join, was wahrscheinlicher ist. Ein Tipp für Fragen nach Querys: Poste immer zu dem Query was es inhaltlich bedeuten soll, Tabellenstruktur und evtl ein paar Beispieldatensätze. Meisten kann man das Query anders formulieren, so dass es ein korrektes Ergebnis liefert. Im Moment kann man nur auf Deinen Querys herum raten Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.