Ankündigung

Einklappen
Keine Ankündigung bisher.

Ergebnis anzeigen, auch wenn keines gefunden wird

Einklappen

Neue Werbung 2019

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

  • Ergebnis anzeigen, auch wenn keines gefunden wird

    Hallo,

    ich habe zwei Tabellen: Die eine speichert ID und Name und die andere speichert zu den entsprechenden IDs, falls vorhanden, Bilderreferenzen. Es kommt vor, dass zu einer ID mehrere Bilderreferenzen vorhanden sind, jedoch sind zu den meisten IDs keine Bilder vorhanden.
    Nun möchte ich eine Abfrage haben, die mir alle IDs ausgibt, deren zugehöriger Name mit A anfängt und in der zweiten Ergebnisspalte soll true für Bilder vorhanden, bzw. false für kein Bild vorhanden stehen.

    Eine Abfrage in der Art

    SELECT person.id, personimage.image
    FROM person, personimage
    WHERE person.name LIKE 'A%'
    AND person.id = personimage.fid

    gibt mir lediglich die id's aus, die mit A anfangen und von denen Bilder vorhanden sind. Sämtliche Personen, von denen keine Bilder vorhanden sind werden nicht aufgeführt.
    Wie kann ich es hinbekommen, dass alle Namen ausgegeben werden, die mit A anfangen, jeweils mit einer Referenz auf ein beliebiges Bild (falls mehrere vorhanden), bzw. NULL, falls kein Bild vorhanden ist? Es reicht auch aus, einfach ein true, bzw. false auszugeben, da es mir lediglich darauf ankommt zu wissen, zu welcher Person Bilder vorhanden sind.


  • #2
    Code:
    SELECT person.id, personimage.image
    FROM person, personimage
    WHERE person.name LIKE 'A%'
    AND (person.id = personimage.fid OR personimage.fid = NULL)
    vlt. gehts so...

    Kommentar


    • #3
      Nein, so geht es nicht, da personimage.fid niemals NULL wird. Es werden wieder nur die Namen ausgegeben, zu denen Bilder vorhanden sind, nicht aber die anderen.

      Kommentar


      • #4
        nimm mal LEFT/RIGHT JOIN, die erzeugen NULLer bei nicht-existenz ...

        Kommentar


        • #5
          teste dieses:
          Code:
          SELECT
             person.id,
             IFNULL(personimage.image, 'kein Bild vorhanden')
          FROM person
          LEFT JOIN personimage ON person.id = personimage.fid
          WHERE person.name LIKE 'A%'
          ~dilemma~

          Kommentar


          • #6
            Hallo, der Tip mit "LEFT JOIN ergibt NULL", falls nicht existent, war der entscheidende Hinweis. Letztendlich kann man es erreichen mit:

            SELECT personID, imageFID
            FROM person
            LEFT JOIN personimage ON personID = personFID
            WHERE person.name LIKE 'A%'

            Aber wie kann ich erreichen, dass jeder name nur einmal angezeigt wird ? Wenn mehrere Bilder vorhanden sind, dann erscheint der Name auch mehrmals. Jeder Name erscheint also mindestens ein mal (wie ich es wollte), jedoch sollte er auch höchstens einmal erscheinen. Kann man in dem JOIN irgendein LIMIT mit einbauen?

            Kommentar

            Lädt...
            X