[SQL] Joing fehlerhafte Ausgabe

Dieses Thema im Forum "Webentwicklung" wurde erstellt von master2005, 19. November 2011 .

Schlagworte:
  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
     
  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?
     
  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 = ;

    --
    -- 
    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' );


     
  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.
     
  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.
     
  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 ?
     
  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"
    );
     
  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
     
  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
     
  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
     
  11. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.