2013-08-24 12 views
11

Próbuję utworzyć prosty pasek wyszukiwania, który przeszukuje moją bazę danych pod kątem określonych słów. Możliwe jest użycie atrybutu LIKE bez użycia GDZIE? Chcę, aby wyszukiwał wszystkie kolumny dla słów kluczowych, a nie tylko jednego. Obecnie mam to:MySQL - Czy można używać LIKE we wszystkich kolumnach tabeli?

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

Która oczywiście wyszukuje tylko nazwiska z wprowadzoną wyszukiwarką. Wypróbowałem oba z nich:

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

i żaden nie zadziałał. Czy to jest coś, co jest możliwe, czy jest inny sposób, aby to osiągnąć?

Odpowiedz

6

Czasami warto spojrzeć na match() funkcji, a także np

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

Można również dodać tryb logiczną do tego:

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

Można również uzyskać wyniki trafności i dodać klucze FULLTEXT, aby przyspieszyć zapytania.

+1

Produkuje "Nie można znaleźć indeksu FULLTEXT pasującego do listy kolumn" – Fanky

+1

Łącze do dokumentacji może być również przydatny: https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html – Kalko

11

Brak skrótu. Musisz określić każdą kolumnę osobno.

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

Nie byłem wcześniej świadomy "OR". To powinno działać idealnie. Doceniam to: – user2566387

+0

akceptuję odpowiedź, jeśli pomogło ci to – skv

+0

hej @skv, czy mógłbyś wyjaśnić porównanie wydajności pomiędzy "match()" i "LIKE + OR"? – Sangram

4

to nie będzie już duplikować wierszy.

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