Hallo,
ich wollte heute mal die Suche auf meiner Website erweitern. Bisher war sie ganz simpel gestrickt. Man konnte einen Suchbegriff eingeben und nach dem wurde dann mittels LIKE in der Datenbank bzw. entsprechenden Tabelle/Spalte gesucht.
Nun möchte ich aber meine Seite noch zusätzlich um eine erweiterte Suche erweitern in dem man u.a. nach Hobbys, Bruttogehalt, Personen pro Haushalt, Alter usw. suchen kann. Dabei habe ich mir dass so gedacht dass ich dafür in HTML einzelne Auswahllisten definiere zum Beispiel für Personen pro Haushalt:
HTML-Code:
<select name="pers" size="5">
<option value="1">1 oder mehr</option>
<option value="2">2 oder mehr</option>
<option value="3">3 oder mehr</option>
<option value="4">4 oder mehr</option>
<option value="5">5 oder mehr</option>
<option value="6">mehr als 5</option>
</select>
Das gleiche für die anderen Suchkriterien also für Bruttogehalt würde ich dann in 100€ Schritten hoch gehen damit es natürlich nicht zu viel in der Auswahlliste wird. Bei Hobbys wird das ganze allerdings noch komplizierter da dort auch eine Mehrfachauswahl mittels "multiple" möglich sein soll. Die einzelnen Hobbys werden dann einfach aus der Datenbank ausgelesen und in die Auswahlbox eingetragen Bspw. so:
Code:
SELECT ID, hobbys FROM tabelle_hobbys
In HTML wird dann die Auswahlliste nur noch entsprechend gefüllt:
HTML-Code:
<select name="hobbys" size="5" multiple>
<option value="1">Radfahren</option>
<option value="2">Fußball</option>
<option value="3">Schwimmen</option>
<option value="4">Tennis</option>
<option value="5">Lesen</option>
<option value="6">Fernsehen</option>
.......
</select>
Das funktionierst soweit auch schon sehr gut!
Nun stellt sich mir aber die Frage wie ich wohl die Datenbank am besten für die Suche gestalte und wie dann eine entsprechende Abfrage auszusehen hat. Die Suche soll so funktionieren das man zum Beispiel eine oder auch mehrere Optionen auswählen kann und diese dann in der Datenbank gesucht und dem entsprechenden User zugeordnet werden. Dabei sollen die einzelnen Optionen innerhalb einer Auswahlliste mit ODER verknüpft werden (es reicht also wenn eines der Hobbys übereinstimmt wenn man mehrere ausgewählt hat) und die einzelnen Auswahllisten wiederum mit UND (es muss also mindestens eine Option pro Auswahlliste übereinstimmen außer man hat eine Auswahlliste frei gelassen sprich keine Option gewählt).
Dazu habe ich mir nun folgende Variante überlegt. Ich erstelle eine Tabelle, nennen wir sie mal "Zusammenfassung" mit drei Spalten. Die erste für die ID der User welche so auch in der Tabelle User vorkommt. Die zweite für die ID der Auswahlliste welche so auch in der Tabelle "Auswahllisten" vorkommt z.B. ID 1 = Hobbys, ID 2 = Alter usw. Und die dritte Spalte letztendlich für die ID der einzelnen Optionen die man auswählen kann so wie sie auch in der Tabelle "Optionen" vorhanden sind. Die beiden Zusatztabellen ("Auswahllisten" und "Optionen") sind bisher nur Theorie und können daher auch noch geändert werden oder falls es eine bessere Methode gibt ganz entfallen. Die Tabelle "Optionen" enthält neben den Option-IDs und den Namen der Optionen (Tennis, Fußball, Schwimmen...) auch noch die ID der Auswahllisten wie sich in der Tabelle "Auswahllisten" zugeordnet ist.
Die Tabelle "Zusammenfassung" vereint also die ganzen Informationen zu den einzelnen Usern und Suchkriterien anhand der IDs. Wie ich die Tabelle fülle wäre mir klar aber wie ich die Daten dann wieder über eine Suche raus filtere mag sich mir noch nicht so ganz offenbaren. Das Problem ist, wie muss ich die Abfrage gestalten um sowohl Treffer zu bekommen wenn mindestens eine der Optionen in den Auswahllisten übereinstimmt obwohl mehrere ausgewählt wurden und das für jede Auswahlliste! Also angenommen ich suche nach den Hobbys "Lesen", "Fußball" und "Tennis" und nach dem Alter "20-30" und "30-40" und nach den Personen pro Haushalt "2 oder mehr". Dann sollten, vorausgesetzt es existieren entsprechende Datensätze, alle User gefunden werden mit mindestens einem der Hobbys UND einem der Altersklassen UND einem der Personen pro Haushalt-Optionen. Natürlich kann man auch noch zusätzlich LIKE '%xyz%' für die Suche in der Personenbeschreibung anwenden um die Suche noch genauer einzugrenzen.
Wie kann ich so eine Suche realisieren? Die Tabellen können noch umgestellt werden falls es eine bessere Lösung gibt als mein Vorschlag mit der Tabelle "Zusammenfassung". Ich wäre für jede Hilfe dankbar und hoffe es findet sich ein Fachmann der mir ein paar Tipps, besser noch Beispiele liefern kann!
Danke und freundliche Grüße,
Lutz