Nochmal zu: Suchen mit Staffelung (Treffer zu x%)

Hallo,

ich hatte das schonmal eingestellt, aber jetzt einfach nochmal, weil ich jetzt erst zur Umsetztung gekommen bin:

ich möchte/muß/darf eine Suche machen mit 10 Suchkriterien.
(PHP & MySQL)

Da kann es ja nun leicht sein, dass ein Suchkriterium vieles ausschließt was auch „zur Not“ gegangen wäre.

Also muß sowas her:
Treffer zu 70%

So - jetzt habe ich dazu 10-Einzelselects nach den 10 Kriterien in dennen die IDs der Einträge abgefragt werden. Die Ergebnisse werden in Arrays zwischengespeichert.

Also das können auch weniger als 10 sein, jenachdem wieviel Suchkriterien angegeben wurden.

Und jetzt wollte ich eigentlich die Arrays gestafelt durchsuchen.
Also:
100% : ID muß in allen Arrays enthalten sein.
100/x% : ID in x Arrays enthalten …

Aber da hängt es jetzt, ich dachte irgendwie so:

if($selectanzahl == 0){
// dann werden alle Einträge angezeigt - unkritisch
}
else{
for($i=$selectanzahl; $i==0; $i–){
// Array x durchsuchen => true/false
// nächstes Array durchsuchen
// wenn in $i-Arrays enthalten ID in Ergebnis-Array inkl. Prozent sichern.

}
}

geh da doch anders ran…
lass Dir die Arrays nacheinander durchlaufen…
ich weiss jetzt ja nicht, ob Du die id im key oder im value gespeichert hast aber prinzipiell solltest Du dann ein einziges end-array erstellen.
Das war es auch was ich Dir zuvor schon geschrieben hatte…

Im Prinzip verwendest Du von Anfang an nur ein einziges array…
im array-key speicherst Du die id des gefundenen eintrags - als value erst mal 1.
In den folgenden Schleifen verwendest Du dann dieses halbfertige array und bevor Du dann wieder $array[$result[id]] = 1 setzt prüfst Du erst mal so:
if (isset($array[$result[id]]) $array[$result[id]]++;
ob der Wert schon gesetzt ist und wenn nicht, dann erhöhst Du ihn um eins.
So weisst Du dann anhand des values „aha $array[$result[id]] wurde 5mal gefunden“.

und dann halt sortieren wie in diesem Beispiel:
$fruits = array („d“=>„Zitrone“, „a“=>„Orange“, „b“=>„Banane“, „c“=>„Apfel“);
arsort ($fruits);
reset ($fruits);
while (list ($key, $val) = each ($fruits)) {
echo „$key = $val\n“;
}

Für das finden der 100% Treffer könnte Dir übrigens auch array_intersect helfen…

SUPER!

Danke. Jetzt hab ich verstanden, wie du das meinst und hab das auch umgesetzt.

Ich werde jetzt in dem Array noch eine 2. Variable einbauen, in der ich binär sichere, welche Kriterien einen Treffer ausgelöst haben.

Und dann ist das richtig gut.

Danke, Danke, Danke und Danke.

Da hätte ich mir sonst noch ewig den Kopf zerbrochen.

:wink: n.P.
dafür simma doch da :wink: