Mehrere Joins Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mehrere Joins Problem

    Hallo,

    da ich gerade dabei bin meine Queries etwas zu optimieren bzw die Anzahl zu verringern habe ich mal wieder ein Problem.

    Ich habe eine Tabelle mit Autos, auf der Seite wo ich das Auto anzeige möchte ich nicht nur die Autodaten auslesen sondern gleichzeitig auch die entsprechenden Userdaten und die Anzahl der Kommentare und die Anzahl der Bilder.
    User, Kommentare, Bilder sind alles eigene Tabellen über die ids verknüpft. Es klappt soweit alles, auch die Anzahl der Kommentare kann ich auslesen aber ich würde nun auch gerne die Anzahl der Bilder haben was im Prinzip dasselbe ist wie bei den Kommentaren, nur nen zweiter Join bringt da irgendwie nicht das gewünschte Ergebnis.

    Hier mein Query der funktioniert, wo aber die Bilderanzahl noch fehlt.

    PHP-Code:
    #Autodaten auslesen
            
    $this->sql->dosql("SELECT
                                     cars.id,
                                     cars.marke,
                                     cars.bezeichnung,
                                     cars.ps,
                                     cars.bj,
                                     cars.kmh,
                                     cars.nm,
                                     cars.cm,
                                     cars.s,
                                     cars.euro,
                                     cars.beschreibung,
                                     cars.picture,
                                     cars.views,
                                     cars.t_stamp,
                                     user.id AS uid,
                                     user.nick,
                                     user.posts,
                                     user.points,
                                     user.avatar,
                                     carvote.votes,
                                     carvote.wert,
                                     COUNT(car_comments.id) as anzcomments
                             FROM
                                     cars,carvote
                             INNER JOIN
                                     user
                             ON
                                     cars.uid = user.id
                             LEFT OUTER JOIN
                                     car_comments
                             ON
                                     cars.id = car_comments.cid
                             WHERE
                                     cars.id = '"
    .$this->arg['id']."'
                             AND
                                     cars.active = '1'
                             AND
                                     cars.voting = 'true'
                             AND
                                     cars.id = carvote.id
                             GROUP BY
                                     cars.id"
    ); 
    ein Kollege meinte nun der inner join wäre auch überflüssig und ich soll das unter where mit der verknüpfung machen, habe aber gelesen das das langsamer ist, weiss da jemand was ?

  • #2
    eventuell wäre es sogar schneller den inner join ganz weg zu lassen, die IDs zu sammeln und dann per IN()(mysql) und explode()(php) einen neuen Query zu basteln, der dir dann die richtigen Infos bringt

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      hm kannst du mir das genauer erläutern ?

      wie sollte sowas ungefähr aussehen, und was genau tut IN dabei ?

      der inner join hat ja eigentlich nichts damit zutun das ich die anzahl der bilder nicht bekomme, denke ich.

      Kommentar


      • #4
        Hi,

        also ich würde dann einfach noch die Bilder mit einen LEFT JOIN anhängen und dann das gleiche Spiel mit COUNT() wie bei car_comments.id.

        Sollte doch eigentlich funktionieren, oder?

        MfG
        Heinzelmännchen

        Kommentar


        • #5
          dachte ich auch, tuts aber leider nicht, dann bekomme ich aufeinmal bei beiden counts seltsame werte raus, auch bei beiden dasselbe

          Kommentar


          • #6
            Zufäälig COUNT1 * COUNT2?

            Versuche stat dem zweiten Count mal sowas in der Art
            Code:
            SUM(IF(bilder.id IS NULL, 0, 1)) anzahl_bilder
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              oder

              count(distinct bilder.id) anzahl_bilder
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar

              Lädt...
              X