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.
Und ich frage die Tabelle "j_person_liste" ab:
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.
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)
PHP-Code:
$query_start = "SELECT * FROM j_person_liste WHERE $query_liste GROUP by kid";
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.
Kommentar