Mysql Scuhanfrage höchste Übereinstimmung
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfragen
ablegen
anliegen
beispiel
ergebnis
frage
http
kriterium
kunde
manual
regel
schuh
sortieren
suchen
union
url
verbessern
verwenden
vorgefertigte funktion
vorstellen
-
Hallo Leute,
ich habe heute mal wieder ein neues Problem :(
Ich muss eine Mysql Suchanfrage stellen, die alle Einträge nach Übereinstimmung der Suchanfrage sortiert.
Im Klartext, am Beispiel bezogen, heißt es:
- Kunde sucht im Shop nach Schuhen, die rot sind, die Größe 43 haben und auf Leder sind.
- Der Shop soll zuerst alle Schuhe anzeigen, die alle drei Kriterien erfüllen und dann die anzeigen, die nur 2 Kriterien erfüllen, dann 1 ... usw.
- Das ganze sollte so flexibel wie nur möglich gestaltet sein, so das man Kriterien schnell hinzufügen oder entfernen kann und man variable Anzahlen an Kriterien verwenden kann.
Die Datenbank hat für jedes Kriterium eine neue Spalte und ist mit 1=erfüllt und 0=nicht erfüllt gefüttert.
Meine Idee war ja schon eine gemeinsame Spalte zu machen, in der alle Kriterien in einem String stehen, etwa so:
11000110 für 8 Kriterien
Und dann geht man nur noch mit einem like Befehl durch.
Das wäre allerdings nicht gerade flexibel und wäre aufwendig zu ändern.
Ich wäre für jeden Denkanstoß sehr dankbar!!
MfG,
Monkeyz -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
eine vorstellung könnte sein:
1. du machst so viele listen, wie viele du maximal brauchst. die zeigen alle einen neutralen text ('bitte wählen sie aus') an.
2. der besucher muss zummindest eine auswahl treffen. in diesem fall geht die query glatt durch.
2. ab zwei auswahlkrierien musst du die query mit UNION zusammenbasteln vor dem absetzen, in etwa so(SELECT ....) UNION (SELECT ...) UNION (SELECT ...) ...
die einzelnen SELECTS kanns du dann behandeln wie du willst, bis auf die kleinigkeit: alle müssen die gleiche anzahl an columns haben UND!! die sollen sogar von seleben type sein (aber da kann man ja auch schummeln ;)
solltest du noch fragen haben, dann musst du mir etwas genaueres über die betroffenen tabellen verraten. -
Eine Lösung die ich mir vorstellen könnte ist, alle Abfragen einzeln zu machen. D.h. du erfragst erst per SELECT die Einträge, die 3 Übereinstimmungen haben, dann die mit 2 usw. und hängst die Ergebnisse dann aneinander. Eine wirklich saubere Lösung ist das aber auch nicht.
MySQL bietet meines Wissens für diese Anforderung keine vorgefertigte Funktion, die sich hier effektiv einsetzen ließe (bitte verbessern, wenn ich falsch liegen sollte).
Alternativ kannst du auch die Ergebnisse im Nachhinein über dein CGI sortieren, hier ließe sich das Anliegen in einer kleinen Methode umsetzen. Zur Sortierung von Arrays lassen sich in PHP die Funktionen sort bzw. array_multisort verwenden.
Die so errechneten Ergebnisse kannst du prinzipiell dann auch in einem Cache ablegen, um Rechenaufwand zu sparen. Wurde in der letzten Zeit bereits nach einem Suchbegriff gesucht, kannst du dann einfach die damals berechneten Daten abfragen.
Was ich mich im Sachzusammenhang aber fragen würde ist, ob ein derartiges Programm wirklich sinnvoll ist. Denn wenn - wie in deinem Beispiel - ein Kunde nach roten Schuhen in Größe 43 sucht, möchte er in der Regel ja auch nur 43er-Schuhe haben. 44er-Paare dürften hingegen zunächst völlig uninteressant sein. -
mermadalis schrieb:
yo mey! hast du schon von 'performance' gehört? einzeln abfragen? (hast du die posting eins vor dir nicht gelesen?) ... "über dein CGI sortieren" ...???? ... da stellen sich die hare am rücken auf!
Eine Lösung die ich mir vorstellen könnte ist, alle Abfragen einzeln zu machen. D.h. du erfragst erst per SELECT die Einträge, die 3 Übereinstimmungen haben, dann die mit 2 usw. und hängst die Ergebnisse dann aneinander. Eine wirklich saubere Lösung ist das aber auch nicht.
MySQL bietet meines Wissens für diese Anforderung keine vorgefertigte Funktion, die sich hier effektiv einsetzen ließe (bitte verbessern, wenn ich falsch liegen sollte).
Alternativ kannst du auch die Ergebnisse im Nachhinein über dein CGI sortieren, hier ließe sich das Anliegen in einer kleinen Methode umsetzen. Zur Sortierung von Arrays lassen sich in PHP die Funktionen sort bzw. array_multisort verwenden.
Die so errechneten Ergebnisse kannst du prinzipiell dann auch in einem Cache ablegen, um Rechenaufwand zu sparen. Wurde in der letzten Zeit bereits nach einem Suchbegriff gesucht, kannst du dann einfach die damals berechneten Daten abfragen.
Was ich mich im Sachzusammenhang aber fragen würde ist, ob ein derartiges Programm wirklich sinnvoll ist. Denn wenn - wie in deinem Beispiel - ein Kunde nach roten Schuhen in Größe 43 sucht, möchte er in der Regel ja auch nur 43er-Schuhe haben. 44er-Paare dürften hingegen zunächst völlig uninteressant sein.
mein vorschlag nochmals: eine einzige sqlabfrage (ungemein rasend schnell!) und minimale php-auswertung. sonst nichts! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage