#1 19. November 2011 Joing fehlerhafte Ausgabe Hallo zusammen ich habe diese SQL Abfrage hier: PHP: SELECT *, SUM ( bw . objekt ) AS anzahl FROM bw INNER JOIN mitglieder ON bw . objekt = '1' AND mitglieder . id = bw . user unter der gleiche bw.objekt ist 2 Einträge abgespeichert. Das bestätigt mir auch der Wer der SUM errechnet. Leider jedoch wird nur eine Zeile ausgegeben. Woran könnte das liegen ? Danke euch ! mfg + Multi-Zitat Zitieren
#2 19. November 2011 AW: Joing fehlerhafte Ausgabe Code: SELECT * FROM bw JOIN mitglieder ON bw.objekt = '1' AND mitglieder.id = bw.user; Du musst nicht INNER dazuschreiben. Kannst du evtl die betroffenen Zeilen aus der Datenbank posten, so das wir das Problem genauer sehen können? + Multi-Zitat Zitieren
#3 20. November 2011 AW: Joing fehlerhafte Ausgabe PHP: CREATE TABLE IF NOT EXISTS ` bw ` ( ` id ` int ( 11 ) NOT NULL AUTO_INCREMENT , ` objekt ` int ( 11 ) NOT NULL , ` sterne ` int ( 11 ) NOT NULL , ` text ` text NOT NULL , ` user ` int ( 11 ) NOT NULL , ` zeit ` int ( 11 ) NOT NULL , ` weiterempf ` int ( 11 ) NOT NULL , ` titel ` varchar ( 200 ) NOT NULL , PRIMARY KEY (` id `) ) ENGINE = MyISAM DEFAULT CHARSET = latin1 AUTO_INCREMENT = 4 ; -- -- Daten für Tabelle ` bw ` -- INSERT INTO ` bw ` (` id `, ` objekt `, ` sterne `, ` text `, ` user `, ` zeit `, ` weiterempf `, ` titel `) VALUES ( 1 , 1 , 4 , 'text' , 1 , 0 , 1 , 'Super Salbe' ), ( 2 , 1 , 2 , '111' , 2 , 0 , 1 , '' ), ( 3 , 2 , 3 , 'qqq' , 1 , 12121212 , 1 , 'Naja' ); + Multi-Zitat Zitieren
#4 20. November 2011 AW: Joing fehlerhafte Ausgabe Also dein Ansatz für JOINS ist meiner Meinung nach total falsch.. Du solltest in der ON-Clause immer einen Verweis auf beide Tabellen haben und nicht auf einen festen Wert.. PHP: SELECT *, SUM ( bw . objekt ) AS anzahl FROM bw INNER JOIN ( mitglieder ) ON ( mitglieder . id = bw . user ) WHERE bw . id = 1 Wenn du explizit nur die Werte für bw.id = 1 haben willst, dann gehört das hinten in das WHERE und nicht zum JOIN dazu... Bei der ON-Clause des Joins geht es nur um die Bedingungen, welche Werte von Tabelle2 mit denen aus Tabelle1 verknüpft werden sollen. + Multi-Zitat Zitieren
#5 20. November 2011 AW: Joing fehlerhafte Ausgabe jetzt sehe ich es auch, du verwendest dein where im on statement: PHP: SELECT * FROM bw JOIN mitglieder ON mitglieder . id = bw . user WHERE bw . objekt = '1' ; sollte die sql nicht gehen, fehlt dir entweder der benutzer mit der id 1 oder 2 in der datenbank. Testen kannst du dies indem du den JOIN ohne WHERE ausführst. + Multi-Zitat Zitieren
#6 20. November 2011 AW: Joing fehlerhafte Ausgabe Danke erstmal für eure Hilfe.. das hier von euch klappt: PHP: SELECT * FROM bw JOIN mitglieder ON mitglieder . id = bw . user WHERE bw . objekt = '1' ; nur wenn ich jetzt die Summe ausgeben möchte der id´s kommt wieder nur eine Ausgabe PHP: SELECT *, SUM ( bw . id ) AS anzahl FROM bw JOIN mitglieder ON mitglieder . id = bw . user WHERE bw . objekt = '1' ; muss ich SUM(bw.id) woanders einsetzen ? + Multi-Zitat Zitieren
#7 21. November 2011 AW: Joing fehlerhafte Ausgabe Also die anzahl die ausgegeben wird ist richtig. Aber nur wenn ich nicht SUM(bw.sterne) AS sterne mit einfüge. Ich möchte aber das mit die Spalte 'sterne' addiert wird von allen gemeins die bei dieser Abfrage ausgegeben werden. So wie es jetzt unten steht kommt nur die Anzahl der Sterne die jeweils im Datensatz steht. PHP: $sql = mysql_query ( "SELECT SUM(bw.sterne) AS sterne , COUNT(bw.id) AS count , bw.id AS id, bw.user AS user, bw.titel AS titel, mitglieder.email AS email FROM bw JOIN mitglieder ON (bw.user = mitglieder.id) WHERE objekt = '1' GROUP BY bw.id" ); + Multi-Zitat Zitieren
#8 21. November 2011 AW: Joing fehlerhafte Ausgabe Ich weiß nicht genau was du vor hast, aber soweit ich weiß kannst du nur eines zur Zeit.. Entweder du lässt dir alle Datensätze einzeln ausgeben oder du fasst sie zusammen und generiest eine Summe aus bestimmten Spalten.. Wenn du schon GROUP BY nutzt (was ja im Grunde richtig ist) dann musste das auch anhand der Spalte machen, wo der Wert bei allen Datensätzen gleich ist.. Was in deinem Fall "objekt" sein sollte, da du dort ja nach dem Wert 1 filterst.. GROUP BY fasst nur gleich Werte in der Spalte zusammen... Aus: Code: SELECT * FROM bla Code: +----+------+------+ | id | name | zahl | +----+------+------+ | 1 | a | 2 | | 2 | b | 1 | | 3 | b | 3 | | 4 | a | 4 | +----+------+------+ wird durch so ein GROUP BY: Code: SELECT id, name, SUM(zahl) FROM bla GROUP BY name Code: +----+------+------+ | id | name | zahl | +----+------+------+ | 1 | a | 6 | | 2 | b | 4 | +----+------+------+ Dadurch werden gleich Werte in Spalte "name" gruppiert und zu einem Datensatz zusammengefasst.. Und durch das SUM auf die Spalte "zahl" werden diese zusammengefassten Datensätze summiert... Dein Query ist zwar vom Prinzip her richtig, aber du gruppierst die Spalte ID, die ja (weils ne ID ist), immer unterschiedliche Werte beinhaltet... MfG + Multi-Zitat Zitieren
#9 21. November 2011 AW: Joing fehlerhafte Ausgabe Danke dir für deine Hilfe . Eigentlich möchte ich von einer. Bewertung alles ausgeben "bw" und den ersteller dieser Bewertung "Mitglieder" ausgeben . Zusätzlich soll halt direkt die Sterne addiert werden aus "bw" Spalte= Sterne und die Anzahl der der jeweiligen bewertungen + Multi-Zitat Zitieren
#10 21. November 2011 AW: Joing fehlerhafte Ausgabe Also ich wüsste jetzt nicht direkt, wie man das schön ein mehrere Queries verpacken kann.. Du könntest das zwar mit Sub-Selects machen: Code: SELECT (SELECT SUM(sterne) FROM bw WHERE objekt = 1) AS sterne, (SELECT COUNT(id) FROM bw WHERE objekt = 1) AS count, bw.id AS id, bw.user AS user, bw.titel AS titel FROM bw WHERE objekt = 1; Ist aber nicht sonderlich schön, würde ich mal behaupten Muss denn zwingend bei jedem Datensatz die Summe und die Anzahl der bw's drin stehen? Weil sonst würde ich das einfach aufspalten in zwei Abfragen.. Oder du kannst ja die Anzahl durch mysql_num_rows() rausbekommen.. Und da du vermutlich ja durch alle Datensätze einmal mit mysql_fetch_*() durchlaufen wirst, kannst du dann ja in PHP die Sterne addieren.. MfG + Multi-Zitat Zitieren