Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen (https://www.delphipraxis.net/108330-%5Bmysql%5D-suche%3B-1-begriff-eingeben-nach-mehreren-suchen.html)

Chrissi91 11. Feb 2008 19:36


[MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
 
Hi,

ich habe eine kleine Suchfunktion im Onlineshop eingebaut:

Code:
$qry = mysql_query("SELECT * FROM shop_artikel WHERE michel LIKE '%".$_POST['form']."%'");
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?

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?

Bernhard Geyer 11. Feb 2008 20:04

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.

Techcrawler 11. Feb 2008 20:24

Re: [MySQL] Suche; 1 Begriff eingeben, nach mehreren suchen
 
Versuchs mal mit
SELECT DISTINCT ...
siehe: http://dev.mysql.com/doc/refman/5.1/de/select.html

marabu 12. Feb 2008 06:09

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

yankee 12. Feb 2008 19:14

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 12:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz