Frage zu eine Abfrage aus 3 Tabellen ...

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

  • Frage zu eine Abfrage aus 3 Tabellen ...

    Hallo,
    ich hätte eine Frage zu einer Abfrage, bei der ich nicht weiterkomme ohne "tausendmal" die Datenbank abzufragen.

    Es geht dabei um eine kleine Personendatenbank. Es gibt eine Suchmaske in der man aus 4 Kategorien (4 SelectMenus) eine Auswahl treffen kann.
    Die Menüpunkte hab ich in einer Tabelle "j_selectliste" mit den Spalten:
    id, liste, bezeichnung

    Der Wert von "liste" kann 1, 2, 3 oder 4 sein und steht für die Kategorie.



    Die weitern Tabellen sind:

    j_person:
    ===============
    kid, name, vorname, alter, ....

    j_person_liste
    ===============
    kid, id


    In der "j_person_liste" wird gespeichert welche Menupunkte [Kategoriepunkte] aus "j_selectliste" auf diese Person zutreffen.

    Soweit zur Struktur.

    ---

    Mein Problem ist nun die Abfrage. Es gibt eine Suchmaske die folgendermaßen aufgebaut ist:

    - SelecteMenu mit den Einträge der liste = 1 (name: kat1[])
    - SelecteMenu mit den Einträge der liste = 2 (name: kat2[])
    - SelecteMenu mit den Einträge der liste = 3 (name: kat3[])
    - SelecteMenu mit den Einträge der liste = 4 (name: kat4[])
    - Suchbebegriff (Volltextsuche) (name: suchwort)

    Zwischen allen herrscht eine UND-Verknüpfung. Innerhelb der SelectMenus ist eine Mehrfachauswahl erlaubt die mit ODER verknüpft wird.


    Solange der User keine Suchbegriff eingibt fällt die Abfrage ja noch relativ einfach aus. Ich lese einfach die 4 Arrays (kat1[], kat2[], kat3[], kat4[]) aus um zu ermitteln was der User alles ausgewählt hat und stell sie zu einem Query ($query_liste) zusammen. Dann habe ich z.B.


    PHP-Code:
    .....  (id 12 OR id 11) AND (id 15 OR id 16) AND (id 21 OR id 23) AND (id 30
    Und ich frage die Tabelle "j_person_liste" ab:

    PHP-Code:
    $query_start "SELECT * FROM j_person_liste WHERE $query_liste GROUP by kid"
    Somit hab ich alle Personen die mit dem übereinstimmen.

    NUR wenn der User nun noch einen Suchbegriff eingibt muss ja automatisch auch in der Tabelle "j_person" in den Spalten "name, vorname, ort" nach diesem Suchbegriff gesucht werden.

    Also in der Tabelle "j_person" wird nach dem Suchbegriff gesucht und in der Tabelle "j_liste" nach einer Übereinstimmung der Kategorieauswahl.

    Wie kann man dies in eine Abfrage packen?



    Meine zweite Frage wäre:
    in der ergebnisliste möchte ich dann die Bezeichnung (aus Tabelle "j_selectliste") auflisten, die auf den User zutreffen. Kann man dies auch mit der obrigen Abfrage gleich verknüpfen und alles gleichzeit ausgeben?

    Wäre super, wenn jemand einen Idee hätte wie man das logisch korrekt lösen kann. Danke schon einmal.
    Zuletzt geändert von icf; 05.06.2003, 16:36.

  • #2
    Mhm. Hat keiner eine Idee?

    Kommentar


    • #3
      Doch! Poste sowas demnächst im SQL-Forum. Da gehörts hin und da bekommst du auch schneller die antworten

      BTW: um so kürzer und präziser die Posts, desto häufiger werden sie gelesen und beantwortet...

      *VERSCHIEB*

      Kommentar


      • #4
        NUR wenn der User nun noch einen Suchbegriff eingibt muss ja automatisch auch in der Tabelle "j_person" in den Spalten "name, vorname, ort" nach diesem Suchbegriff gesucht werden.

        Also in der Tabelle "j_person" wird nach dem Suchbegriff gesucht und in der Tabelle "j_liste" nach einer Übereinstimmung der Kategorieauswahl.
        Sauberwort heißt: JOIN

        Kommentar


        • #5
          Original geschrieben von TobiaZ
          Sauberwort heißt: JOIN
          und hier wird der trick erklärt: sauberwort join
          Ich denke, also bin ich. - Einige sind trotzdem...

          Kommentar


          • #6
            Ok. Vielleicht kapiert das keiner was ich genau möchte, deshalb das ganze ohne großartigen Text mit Beispiel.


            Tabellenstruktur
            ============================
            j_person
            kid | name | vorname | alter

            j_person_liste
            kid | id

            j_selectliste
            id | liste | bezeichnung


            Beispieleinträge
            ============================

            j_selectliste
            1 | 1 | Bayern
            2 | 1 | Berlin
            3 | 1 | Hamburg
            4 | 2 | blau
            5 | 2 | grün
            6 | 2 | braun
            7 | 2 | dunkel braun
            8 | 3 | Auto
            9 | 3 | Fahrrad
            10 | 3 | Bahn


            j_person
            1 | Max | Mustermann | 17
            2 | Michael | Meister | 20


            j_person_liste
            1 | 1
            1 | 2
            1 | 5
            1 | 8
            1 | 9
            2 | 3
            2 | 7
            2 | 8

            ....................................................
            Die j_selectliste umfasst 3 Kategorien (Spalte liste):
            1 steht für Bundesland
            2 steht für Augenfarbe
            3 steht für Bewegungsmittel
            ....................................................



            Die Suchmaske sieht dann folgendermaßen aus:
            ============================
            Bundesland: Selectmenu mit allen Einträge mit liste=1 : kat1[]
            Augenfarbe: Selectmenu mit allen Einträge mit liste=2 : kat2[]
            Bewegungsmittel: Selectmenu mit allen Einträge mit liste=3 : kat3[]
            Suchbegriff: (Texteingabe) : stichwort

            Innerhalb der 3 Kategorien ist eine Mehrauswahl möglich (oder-verknüpfung), deshalb die Arays kat1[], kat2[] und kat3[]


            Suche
            ============================
            Gesucht werden soll nun in der j_person_liste in den Spalten vorname | name nach einer Übereinstmmung mit stichwort UND in j_person_liste nach einer Übereinstimmung der Kategoriewahl die auf die Person zutrifft.

            Beispiel
            ============================
            Ich suche nach:

            Bundesland: 1 oder 3
            Augenfarbe: 5 oder 6
            Bewegungsmittel: 8
            Suchbegriff: Max


            Somit erscheint als Suchergebnis:

            Max Mustermann
            Bundesland: Bayern, Berlin
            Augenfarbe: grün
            Bewegungsmittel: Auto, Fahrrad


            Meine Frage ist nun wie ich dafür eine richtige Abfrage erstellen kann.

            Kommentar

            Lädt...
            X