2013-08-24 3 views
11

Ich versuche eine einfache Suchleiste zu erstellen, die meine Datenbank nach bestimmten Wörtern durchsucht. Es ist möglich, das LIKE-Attribut zu verwenden, ohne WHERE zu verwenden? Ich möchte, dass alle Spalten nach den Schlüsselwörtern durchsucht werden, nicht nur einer. Derzeit habe ich das:MySQL - Ist es möglich, LIKE für alle Spalten in einer Tabelle zu verwenden?

mysql_query("SELECT * FROM shoutbox WHERE name LIKE '%$search%' ") 

Die offensichtlich nur nach Namen mit dem Sucheingang sucht. Ich probierte beides:

mysql_query("SELECT * FROM shoutbox LIKE '%$search%' ") 
mysql_query("SELECT * FROM shoutbox WHERE * LIKE '%$search%' ") 

und keiner arbeitete. Ist das möglich oder gibt es einen anderen Weg?

Antwort

6

Sie könnten an der MATCH() Funktion auch zB aussehen wollen:

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') 

Sie auch boolean-Modus diese hinzufügen:

SELECT * FROM shoutbox 
WHERE MATCH(`name`, `foo`, `bar`) AGAINST ('$search') IN BOOLEAN MODE 

Sie auch das bekommen Relevance Scores und fügen FULLTEXT Schlüssel hinzu, um die Abfragen zu beschleunigen.

+1

Erzeugt "FULLTEXT-Index nicht passend zur Spaltenliste" – Fanky

+1

Ein Link zur Dokumentation könnte auch nützlich sein: https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html – Kalko

11

Es gibt keine Abkürzung. Sie müssen jede Spalte einzeln angeben.

SELECT * FROM shoutbox 
    WHERE name LIKE '%$search%' 
     OR foo LIKE '%$search%' 
     OR bar LIKE '%$search%' 
     OR baz LIKE '%$search%' 
+2

Mir war vorher nicht "OR" bekannt. Dies sollte perfekt funktionieren. Ich schätze es – user2566387

+0

akzeptiere die Antwort, wenn es dir geholfen hat – skv

+0

hey @skv, könntest du bitte über den Leistungsvergleich zwischen "match()" und "LIKE + OR" erklären? – Sangram

4

Dies wird keine doppelten Zeilen mehr anzeigen.

SELECT * FROM shoutbox 
WHERE (name LIKE '%$search%' 
    OR foo LIKE '%$search%' 
    OR bar LIKE '%$search%' 
    OR baz LIKE '%$search%')