You are not logged in.

  • Login

1

Thursday, January 7th 2010, 10:54pm

MySQL SELECT für durchsuchen

Hi zusammen,

Ich steh auf dem schlauch. Es gibt eine Table mit dem Namen products

Diese sieht folgendermaßen aus:

Category1 | Category2 | Category3 | Title
Frauen | Oberteile | Pullover | Bench Pullover


So, nun habe ich ein Suchfeld, da gibt jemand ein:
Frauen Hosen => Kein Ergebnis
Frauen => Kein Ergebnis
Pullover => Kein Ergebnis
Bench => Der Pullover wird angezeigt.

So sieht meine Abfrage derzeit aus:

PHP Quellcode

1
$sql = "SELECT * FROM products WHERE Category1 = '$stag' OR Category2 = '$stag' OR Category3 = '$stag' OR Title LIKE '%$stag%' LIMIT $start, $eintraege_pro_seite";


Folgendes möchte ich gerne tun. Er soll mir die drei Spalten in eine packen, und dann nach dem Suchbegriff suchen, kommt es irgendwo vor, ab ins query Ergebnis. Ich kann es nicht mit einer PHP Schleife lösen, es muss im SELECT geschehen.

Danke für Tips,
Matze

2

Friday, January 8th 2010, 9:19am

Like ist leider ganz falsch. Bei Like Abfragen werden die Tabellenindizes ignoriert.
Du musst mit einem Volltextindex über die drei Spalten arbeiten.

Du nutzt MySQL wie ich sehe? Dort gibts den Volltext Index:
Siehe http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html

Tabellenlayout ändern

SQL Code

1
ALTER TABLE products ADD FULLTEXT INDEX(Category1, Category2, Title);

Suche durchführen

SQL Code

1
SELECT * FROM products WHERE MATCH (Category1, Category2, Title) AGAINST ('$stag');


Schau dir außerdem die weiteren Optionen im Manual an um die Suche zu tunen.

3

Friday, January 8th 2010, 6:19pm

Hi!

Super, das funktioniert, einziges Problem ist halt jetzt noch das er wenn ich "frauen Jacken" eingebe auch alles aus der Category1 zieht wo eben Männer oder Frauen steht ... weiß da noch jemand Rat?

Matze

4

Friday, January 8th 2010, 6:52pm

Siehe dazu: http://dev.mysql.com/doc/refman/5.1/de/fulltext-boolean.html
Du musst die Suchanfrage richtig formulieren.

Am besten du ergänzt einfach vor jedem Wort ein +

Social bookmarks