phpbar.de logo

Mailinglisten-Archive

[php] AW: [php] verbessern des Suchalgorithmus

[php] AW: [php] verbessern des Suchalgorithmus

Tim Hildebrandt TConnect_(at)_gmx.net
Thu, 6 Apr 2000 02:13:20 +0200


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