Mailinglisten-Archive |
Dadurch, daß Du jedes mal die OR-Verknüpfung gewählt hast, kannst Du das an dieser Stelle nicht konkretisieren. Denn bei OR findet die Suche ja genau dann einen Datensatz, wenn mindestens ein Element übereinstimmt. M.E. müßtest Du pro Listenmitglied eine Trefferzahl ermitteln lassen, indem Du jedes Suchhobby mit den eingetragenen Hobbies vergleichst. Sollte dieser Wert eine Grenze erreichen (in Deinem Beispiel 4), dann soll der Datensatz übernommen werden. Wenn nicht, dann eben nicht. Problem: Diese Art der Suche wird ziemlich viel Zeit in Anspruch nehmen und kann - je nach der Anzahl der eingetragenen Personen - schon mal etwas länger dauern. Wenn Du die Datensätze nicht direkt übernehmen kannst, so füge an Deine Namenstabelle noch ein Feld an, das eine PID (ProzessID) aufnehmen kann. Jeder Besucher Deiner Seite erhält mittels Cookie eine ebensolche. Sollte nun die Suche in der Tabelle mit den Vorgaben übereinstimmen, dann kann die PID beim ersten Durchgang in jeden treffenden Datensatz geschrieben werden und in einem zweiten Durchgang werden eben nur diejenigen Datensätze ausgeworfen, die die PID beinhalteten. Dadurch ist es möglich, das Suchergebnis nachträglich noch zu verändern: Wenn der Anwender nun meint, daß er doch nicht alle Leute mit Hobby A haben will, kann er auf einen für ihn bereits vorhandenen Datenstamm zurückgreifen und nur die Leute rausschmeißen, die eben Hobby A haben. Dadurch werden hintergelagerte Prozesse dann doch wieder schneller. -----Ursprüngliche Nachricht----- Von: php-admin_(at)_infosoc.uni-koeln.de [mailto:php-admin_(at)_infosoc.uni-koeln.de]Im Auftrag von Alex Meyer Gesendet: Dienstag, 4. April 2000 20:25 An: php_(at)_solix.wiso.Uni-Koeln.DE Betreff: [php] verbessern des Suchalgorithmus Hallo Liste, ich sitze momentan an einem Projekt. Es soll ein "Singlefinder" werden. Das heisst jemand kann sich in die Datenbank eintragen (Hobbys(36 Auswahlmöglichkeiten),Alter,gewünschtes Alter des Partners, Wohnort,...). Die abfrage klappt auch wunderbar, ausser das mit den Hobbys. Ich überprüfe am Anfang welche Hobbys gewählt wurden. Dann stecke ich diese in ein Array. Jetzt erstellt eine Funktion einen Query: --- Funktion START function createHobbyQuery($array) { $string = ""; $endArray = count($array); for ($i = 0;$i<=$endArray;$i++) { if ($i == 0) { $string .= " hobbyid.hobbynumber = '$array[$i]' OR "; } if ($i == $endArray) { $string .= "hobbyid.hobbynumber = '$array[$i]'"; return trim($string); } $string .= "hobbyid.hobbynumber = '$array[$i]' OR "; } } --- Funktion ENDE Wie Ihr seht ist das hier alles mit einer OR Verknüpfung realisiert. Den fertige "Zwischenquery" setzte ich jetzt in den Endquery. Jetzt das Problem: Wenn Mann1 ca. 10 Hobbys gewählt hat und Frau1 auch 10, aber Frau1 hat nur 1 mal das selbe Hobby wie Mann1, wird sie trotzdem (vorausgesetzt die anderen Daten stimmen auch überein) gefunden. Jetzt endlich die Frage: Wie kann ich so etwas präzisieren? Das z.B. mindestens 4 Hobbys übereinstimmen müssen oder so ähnlich? Oder gibt es vieleicht eine Funktion dafür? Freue mich über jeden Denkanstoß. --Alex Meyer -- ** Durchgehend geöffnet: http://www.php-center.de ** Die PHP-Liste: mailto:php_(at)_infosoc.uni-koeln.de http://infosoc.uni-koeln.de/mailman/listinfo/php
php::bar PHP Wiki - Listenarchive