Inner Joins

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

  • Inner Joins

    Hallo Forum,

    dieses Problem macht mich wahnsinnig.
    EDIT:
    leute, die es nicht mal schaffen, in so einem eindeutigen fall das richtige forum zu finden, mich auch ...
    *verschieb*


    Es sollen zu einem Produkt Kommentare ausgegeben werden. Dabei können mehrere Personen zu einem Produkt einen Kommentar ausgeben.

    Hier ist der Code der bisher funktioniert(Ohne Kommentare).

    PHP-Code:
    /* retrieve latest products */
    $res =& $db->query("

    SELECT p1.name, p1.since, p2.pid, p3.picture, p4.produktbeschreibung
    FROM (products p1 
    INNER JOIN lnk_product_pic p2 on p1.pid = p2.pid
    INNER JOIN picture p3 on p3.id_pic = p2.id_picture)
    INNER JOIN productinfo p4 on p1.pid = p4.pid
    WHERE p1.since between year(CURDATE())-1 and year(CURDATE())
    AND  lang = '"
    .$language."'
    ORDER BY p1.since DESC"
    );
                                    
    $latestProducts = array();

    $x 1;
    $row =& $res->fetchRow(DB_FETCHMODE_ASSOC);
    $row['thumb'] = str_replace(".jpg""-t.jpg"$row['picture']);
    $latestProducts[0] = $row;

    while (
    $row =& $res->fetchRow(DB_FETCHMODE_ASSOC)) {
        if (
    $row['name'] != $latestProducts[$x-1]['name']) {
            
    $row['thumb'] = str_replace(".jpg""-t.jpg"$row['picture']);
            
    $latestProducts[$x] = $row// wenn fertig, läuft DatenIndex von 1 bis x-1
            
    $x++;
        }


    Wenn der QUERY wie folgt abgeändert wird, wird nur noch ein Produkt ausgegeben.

    PHP-Code:
    $res =& $db->query("SELECT p1.name, p1.since, p2.pid, p3.picture, p4.produktbeschreibung, p5.comment, p6.name_f, p6.name_l

    FROM (products p1 
    INNER JOIN lnk_product_pic p2 on p1.pid = p2.pid
    INNER JOIN picture p3 on p3.id_pic = p2.id_picture)
    INNER JOIN productinfo p4 on p1.pid = p4.pid
    INNER JOIN products_comments p5 on p4.pid = p5.pid
    INNER JOIN contacts p6 on p5.id_person = p6.id
    WHERE p1.since between year(CURDATE())-1 and year(CURDATE())
    AND  lang = '"
    .$language."'
    ORDER BY p1.since DESC"
    ); 
    Sieht jemand das Problem ?


    Danke
    Zuletzt geändert von antman; 01.09.2004, 15:43.
    Pickel ? Übergewicht ? Depressionen ?
    Brot, Kartoffeln und Milch sind Gift!
    http://www.paleofood.de

  • #2
    Re: Inner Joins

    Original geschrieben von antman
    Sieht jemand das Problem ?
    ja
    1. das ist mysql und nicht php, du hast also im falschen forum gepostet
    2. INNER JOIN heißt, es muss in beiden tabelle was gefunden werden
      gibt es zu einem bild aber keinen kommentar, dann kriegst du durch das INNER JOIN auch kein ergebnis (beim join von comments auf contacts genauso, denn wenn es keinen kommentar gibt, gibt's logischerweise auch keinen user, der ihn abgegeben hat)


    lösung: mach aus den zwi einfach LEFT JOINs
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Du bist mein Idol.

      Das klappt sogar. Nur das Problem ist, dass jeweils nur ein Kommentar angezeigt wird. Also nur eine Person.
      Pickel ? Übergewicht ? Depressionen ?
      Brot, Kartoffeln und Milch sind Gift!
      http://www.paleofood.de

      Kommentar


      • #4
        Also jetzt möchte ich noch eine Sache hinzufügen.

        Bisher waren die Bilder der Kontakte mit in der Tabelle "contacts".
        Nun habe ich mir überlegt, dass es doch sinnvoller ist die Bilder der Personen mit in die Tabelle "picture" zu nehmen, da ja eine Person mehere Bilder haben kann.

        Habe den Query umgeschrieben, aber es funktioniert nicht.

        PHP-Code:
        $res =& $db->query("SELECT p1.name, p1.since, p2.pid, p3.picture, p4.produktbeschreibung, 
        p5.comment, p6.name_f, p6.name_l, p6.pic

        FROM (products p1 
        INNER JOIN lnk_product_pic p2 on p1.pid = p2.pid
        INNER JOIN picture p3 on p3.id_pic = p2.id_picture)
        INNER JOIN productinfo p4 on p1.pid = p4.pid
        LEFT JOIN products_comments p5 on p4.pid = p5.pid
        LEFT JOIN contacts p6 on p5.id_person = p6.id
        LEFT JOIN lnk_contact_pic p7 on p3.id_person = p6.id
        WHERE p1.since between year(CURDATE())-1 and year(CURDATE())
        AND  lang = '"
        .$language."'
        ORDER BY p1.since DESC"
        ); 
        Wie weiß man aber nun welches pic das von der Person ist und welches vom Produkt ?

        Oder muss man das ganz anders machen ?

        Danke
        Pickel ? Übergewicht ? Depressionen ?
        Brot, Kartoffeln und Milch sind Gift!
        http://www.paleofood.de

        Kommentar

        Lädt...
        X