[SQL allgemein] Probleme mit joins

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

  • [SQL allgemein] Probleme mit joins

    hallo zusammen,

    irgendwie bekomme ich die Funktionsweise von den verschiedenen Joins noch nicht richtig auf die Reihe.

    Das ist meine Abfrage:

    PHP-Code:
    $query "select * from mdb_medium where titel like '%$suche%' OR autor like '%$suche%' OR erscheinungsjahr like '%$suche%' OR isbn like '%$suche%' OR verlag like '%$suche%'"
    Ich habe in der mdb_medium aber noch 2 Spalten die ich auch gerne durchsuchen möchte, dort stehen aber Fremdschlüssel zu anderen Bereichen drin.
    Es gibt noch Bereiche(mdb_bereich) und Medienart(mdb_mediumart), jeweils in einer eigenen Tabelle mit der ID und der Bezeichnung. In der Tabelle mdb_medium stehen lediglich die IDs der Breiche und der Medienart.

    Wie muß meine Abfrage aussehen, damit ich auch in den anderen Tabellen in der Bezeichnung suchen kann und mir dann die ID aus der mdb_medium ausgewählt wird?

    Danke im voraus!


    Gruß
    timsen

  • #2
    post doch mal bitte die struktur der beiden tabellen. und welche spalte die referenz bildet.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      mdb_bereich: bereichID, bereich
      mdb_mediumart: mediumartID, mediumart

      Die beiden IDs sind dann als Fremdschlüssel in der mdb_medium enthalten.

      mdb_medium: mediumID, mediumartID, titel, autor, erscheinungsjahr, isbn, bereichID, verlag, beschreibung, status.

      Kommentar


      • #4
        bitte sehr. den WHERE block bekommst du aber selber hin...
        Code:
        SELECT    M.titel,
                  M.autor,
                  M.erscheinungsjahr,
                  M.isbn,
                  M.verlag,
                  M.beschreibung,
                  M.status,
                  MB.bereich
                  MA.mediumart
                  
        FROM      mdb_medium M
                    LEFT OUTER JOIN mdb_bereich MB ON (M.bereichID = MB.bereichID)
                    LEFT OUTER JOIN mdb_mediumart MA ON (M.mediumartID = MA.mediumartID)
                    
        WHERE     M.titel = 'mein neues haus'
        EDIT:
        kleinen fehler korrigiert
        Zuletzt geändert von Abraxax; 21.05.2003, 12:40.
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Ich hoffe doch

          Also ich will jetzt nicht die ganze where Bedingung reinschreiben.
          Ich habs so gemacht ums mit dem Suchbegriff zu verknüpfen:

          PHP-Code:
          MA.mediumart like '%$suche%' 
          ist das so falsch? *duck*
          Wenn nach etwas Suche was z.B. nur in mediumart stehen dürfte wird mir nichts angezeigt.

          Kommentar


          • #6
            mache mal lieber eine stringteilung.
            PHP-Code:
            $sql " .... WHERE MA.mediumart like '%".$suche."%' ...."
            steht denn in MA.mediumart auch sowas drin, was in $suche stand? ansonsten ist es korrekt.
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              aaaarrrrg.
              hab einen kleinen fehler gemacht.

              so muss es heissen in der einen zeile
              Code:
              LEFT OUTER JOIN mdb_mediumart ON (M.mediumartID = MA.mediumartID)
              habs oben korrigiert. jetzt sollte es klappen.

              das mediumart musste natürlich mediumartID heissen.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                Irgendwie funktioniert das immer noch nicht, ich habe jetzt eine Stringteilung gemacht und bekomme folgende Fehlermeldung:

                "Unknown table 'MB' in field list"

                Hier mein Script:
                PHP-Code:
                  // ausführen von SQL Querys             
                    
                $query "SELECT M.titel, M.autor, M.erscheinungsjahr, ";
                    
                $query .= "M.isbn, M.verlag, M.beschreibung, M.status, MB.bereich, MA.mediumart ";
                    
                $query .= "from mdb_medium M ";
                    
                $query .= "LEFT OUTER JOIN mdb_bereich ON (M.bereichID = MB.bereichID) ";
                    
                $query .= "LEFT OUTER JOIN mdb_mediumart ON (M.mediumartID = MA.mediumartID) ";
                    
                $query .= "where M.titel like '%$suche%' OR M.autor like '%$suche%' ";
                    
                $query .= "OR M.erscheinungsjahr like '%$suche%' OR M.isbn like '%$suche%' ";
                    
                $query .= "OR M.verlag like '%$suche%' OR MB.bereich like '%$suche%' ";
                    
                $query .= "OR MA.mediumart like '%$suche%'"

                Kommentar


                • #9
                  sorry. da muss noch das MA und MB rein. hab' ich leider auch vergessen gehabt.

                  oben habe ich es bereits korrigiert. und hier noch einmal für dich...
                  Code:
                  LEFT OUTER JOIN mdb_bereich MB ON (M.bereichID = MB.bereichID)
                  LEFT OUTER JOIN mdb_mediumart MA ON (M.mediumartID = MA.mediumartID)
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    Du bist ein Schatz !

                    Klappt alles wunderbar.

                    Kommentar

                    Lädt...
                    X