Anzeige

MySql - Join Abfrage

MySql - Join Abfrage | PSD-Tutorials.de

Erstellt von redbull2906, 03.12.2009.

  1. redbull2906

    redbull2906 Nicht mehr ganz neu hier

    Dabei seit:
    10.09.2007
    Beiträge:
    170
    Geschlecht:
    männlich
    Software:
    Photoshop, Dreamweaver, Illustrator
    Kameratyp:
    Nikon D60 & Nikon D7000
    MySql - Join Abfrage
    Hallo Leute,

    ich habe 2 Tabellen eine mit den userdaten die andere mit Bilder der user.
    Ich möchte gerne eine Übersicht alles User mit einem ihrer Bilder haben.

    Das Bild soll immer das sein mit der kleinsten id die automatisch beim hochladen vergeben wurde.

    Zur Zeit habe ich folgende Abfrage

    PHP:
    1. $Sql = 'SELECT u.id, u.name, p.img
    2.            FROM user u
    3.            LEFT JOIN pic p ON p.u_id = u.id            
    4.            WHERE p.id = (SELECT MIN(p2.id) FROM pic p2 WHERE p2.u_id = u.id)
    5.            ORDER BY f.name ASC';                
    Soweit ok nur natürlich stehen in der Ausgabe dann die user bei denen auch Bilder vorhanden sind. Ich möchte aber auch die user sehen die noch oder gar kein Bild hinterlegt haben.

    Was muss ich im SELECT ändern damit er mir beides auswirft?
     
    #1      
  2. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Ganz dumm, ohne testen zu können, würde ich prüfen ob p.id gleich Null ist

    PHP:
    1.  
    2. $Sql = 'SELECT u.id, u.name, p.img
    3.            FROM user u
    4.            LEFT JOIN pic p ON p.u_id = u.id            
    5.            WHERE p.id = (SELECT MIN(p2.id) FROM pic p2 WHERE p2.u_id = u.id)
    6.            OR p.id IS NULL
    7.            ORDER BY f.name ASC';  
    8.  
    k.A. ob das jetzt =Null oder is Null sein muss
     
    Zuletzt bearbeitet: 03.12.2009
    #2      
  3. eytibi

    eytibi *moep*

    Dabei seit:
    25.08.2009
    Beiträge:
    50
    Geschlecht:
    männlich
    Ort:
    NRW
    Software:
    Photoshop CS
    Kameratyp:
    Canon EOS 450 D
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Mach mal aus dem LEFT JOIN ein LEFT OUTER JOIN.

    Das gibt auch Egebnisse zurück wenn in der 'rechten' Tabelle (Bilder) keine Datensätze vorhanden sind.
     
    #3      
  4. redbull2906

    redbull2906 Nicht mehr ganz neu hier

    Dabei seit:
    10.09.2007
    Beiträge:
    170
    Geschlecht:
    männlich
    Software:
    Photoshop, Dreamweaver, Illustrator
    Kameratyp:
    Nikon D60 & Nikon D7000
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Genau so ist es richtig (OR p.id IS NULL) - auf die einfachsten Sachen kommt man nicht *arrrrrrr*

    danke nun tu es was es soll

    ich leg mal ne brainbreak ein ;)

    Danke nochmal
     
    #4      
  5. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Pobier aber trotzdem mal den Vorschlag von eytibi aus. Könnte u.U. etwas schneller sein und sieht auch schöner aus ;)
     
    #5      
  6. redbull2906

    redbull2906 Nicht mehr ganz neu hier

    Dabei seit:
    10.09.2007
    Beiträge:
    170
    Geschlecht:
    männlich
    Software:
    Photoshop, Dreamweaver, Illustrator
    Kameratyp:
    Nikon D60 & Nikon D7000
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    habe ich - nur user mit bild in der ausgabe
     
    #6      
  7. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Und was würde die Unterstützung zu einer ODBC-Datenbank nun erwirken?

    Ich würde folgenden Ansatz heranziehen:
    PHP:
    1.  
    2. <?php
    3. $Sql = 'SELECT
    4.            u.id, u.name,
    5.            p.img
    6.        FROM
    7.            user u
    8.            LEFT JOIN pic p ON ( MIN(p.u_id) = u.id)            
    9.        ORDER BY
    10.            f.name';
    11. ?>
    12.  
    Wenn in einer Where-Bedingung ein nochmaliger SELECT erfolgt, ist Quasi der LEFT JOIN für'n Nullinger. Den der Grund des LEFT, RIGHT, INNER-JOIN's ist es ja eine Tabellenreferenzierung zu erhalten. Ergo sollte auch in der Referenzierung die Bedingung für die Tabelle der Bilder vorhanden sein.

    Da du eine Liste aller User haben möchtest, wäre die Bedingung lediglich dann erforderlich, um zu prüfen, ob User auch Bilder haben. Wobei selbst dass wiederum in einen LEFT JOIN gehören würde. Bei einem RIGHT JOIN wäre das Ergebnis von User die auch ein Bild hinterlegt haben. Sprich es muss in der Referenzierung ein Ergebnis vorhanden sein. Ansonsten würde der User ohne Bild nicht dargestellt.

    Weitere Infos zu JOIN's sind auch unteranderem hier zu finden: MySQL :: Die populrste Open-Source-Datenbank der Welt

    Wenn du phpMyAdmin oder den Query-Browser nutzt, kannst du ja mal dein Query-String dort eingeben um zu sehen, wie lange eine Anfrage benötigt. Insbesondere mit der WHERE - Bedingung und dem darin befindlichen SELECT.

    Übrigens, ASC wird nicht benötigt, da die Sortierung automatisch von mysql aufsteigend ist. Ausgenommen, du möchtest eine Absteigende Sortierung. Dann wäre lediglich DESC anzuhängen.
     
    Zuletzt bearbeitet: 03.12.2009
    #7      
  8. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    @saila: Klammer nicht geschlossen und p.id hat doch mit u.id nichts zu tun, oder?!
     
    #8      
  9. saila

    saila Moderatorle

    Dabei seit:
    21.06.2006
    Beiträge:
    2.239
    Geschlecht:
    männlich
    Ort:
    50°48'23.69" N 7°14'22.19" O
    Software:
    Eclipse, PHP5 OO, MySQL5, CSS(auch Barrierefrei), JS, Symfony
    MySql - Join Abfrage
    AW: MySql - Join Abfrage

    Stimmt, ist korrigiert. Allerdings ist das ja nur ein Beispiel von der Herangehensweise. Muss ja nicht immer gleich die Lösung sein :)
     
    #9      
x
×
×