Е, винаги можете да опитате WHERE textcolumn LIKE "%SUBSTRING%"
- но това е гарантирано, че е доста бавно, тъй като вашата заявка не може да направи съвпадение на индекса, защото търсите знаци от лявата страна.
Зависи от типа поле - текстовото поле обикновено няма да бъде запазено като VARCHAR, а по-скоро като (вид) TEXT поле, така че можете да използвате МАЧИВ СРЕЩУ оператор.
За да получите колоните, които не съвпадат, просто поставете NOT пред подобно:WHERE textcolumn NOT LIKE "%SUBSTRING%"
.
Дали търсенето е чувствително към малки и малки букви, зависи от начина, по който съхранявате данните, особено какво COLLATION използвате. По подразбиране търсенето ще бъде независимо от главните букви.
Актуализиран отговор, който отразява актуализацията на въпроса:
Казвам, че правим WHERE field LIKE "%value%"
е по-бавно от WHERE field LIKE "value%"
ако полето на колоната има индекс, но това все пак е значително по-бързо от получаването на всички стойности и филтъра на приложението. И двата сценария:
1/ Ако направите SELECT field FROM table WHERE field LIKE "%value%"
, MySQL ще сканира цялата таблица и ще изпрати само полетата, съдържащи "стойност".
2/ Ако направите SELECT field FROM table
и след това накарайте приложението си (във вашия случай PHP) да филтрира само редовете със "стойност" в него, MySQL също ще сканира цялата таблица, но ще изпрати всички полета на PHP, който след това трябва да свърши допълнителна работа. Това е много по-бавно от случай №1.
Решение:Моля, използвайте WHERE
клауза и използвайте EXPLAIN
за да видите изпълнението.