![]() |
[MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
Hi,
ich habe eine kleine Suchfunktion im Onlineshop eingebaut:
Code:
Jetzt ist der Shop ausschließlich für Briefmarken gedacht. Der User kann eingeben "Herz" oder "Hz" bzw. "Block" oder "Bl". Ich möchte gerne, dass wenn eines von beiden Möglichkeiten eingegeben wird, also Herz oder Hz nach beidem gesucht wird und doppeltes nicht doppelt aufgeführt wird?
$qry = mysql_query("SELECT * FROM shop_artikel WHERE michel LIKE '%".$_POST['form']."%'");
Gibts da zufällig sone coole Funktion, oder muss ich das selbst einbauen mit 2 Querys. Das eine führe ich aus, das 2. ersetze ich mit den entsprechenden anderen Begriffen, führe es auch aus, tu die in ein Array wo ich doppelte einträge kicke? |
Re: [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
Für ähnliche Begriff würde mir noch SoundEx einfallen. Ob das jedoch solche Fälle abdeckt glaube ich nicht.
Da wäre eher Programmlogik nötig die bei einem Suchbegriff alle anderen als "... or like ..." ergänzt. |
Re: [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
|
Re: [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
Hallo Christopher,
soweit ich dein Problem verstehe, geht es darum Synonyme in eine Suche einzubeziehen. MySQL unterstützt einen Full-Text Index, was die Suche gegenüber LIKE drastisch beschleunigen kann. Außerdem vereinfacht die Suche mit MATCH ... AGAINST auch dein Problem enorm. Du führst einfach eine Synonym-Tabelle - das muss nicht in der Datenbank sein, eine Textdatei mit dem Zeilenformat "Wort=Synonym1,Synonym2" wäre ausreichend. Hast du die Suchworte erhalten, so ergänzt du sie um die Synonyme und baust die Full-Text Query. So musst du nicht mehrere Queries absetzen. Freundliche Grüße |
Re: [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
Um Marabus Kommentar noch zu erweitern:
SELECT MATCH(spalte) AGAINST ('wort1 wort2 ...') AS relevanz FROM ... ORDER BY relevanz DESC Damit kannst du einen Volltext query ausführen. Natürlich nur, wenn du vorher auch einen Volltextindext gesetzt hast. Ein Anfrage WHERE spalte='%wort%' ist so ziemlich DIE langsamste Aktion, die es in MySQL nur gibt *gg*. Oder um es mal mit anderen Worten zu formulieren: "Es führt zum Ziel, fragt sich nur wann" ;-). Und lass dich bitte noch kurz vor mysql-injections warnen: Wenn $_POST['form'] =="'", also wenn da ein Apotrophe drinsteht, hast du ein Problem. Eventuell klappt sogar $_POST['form'] ="'; TRUNCATE TABLE shop_artikel; SELECT '"; Und du hast keine Artikel mehr ^^. Also immer schön mysql_real_escape() vorher auf deine Variabeln anwenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz