Cóż, zawsze możesz spróbować WHERE textcolumn LIKE "%SUBSTRING%"
- ale na pewno będzie to dość powolne, ponieważ twoje zapytanie nie może dopasować indeksu, ponieważ szukasz znaków po lewej stronie.
Zależy to od typu pola - obszar tekstowy zwykle nie zostanie zapisany jako VARCHAR, ale jako (rodzaj) pole TEKSTOWE, więc możesz użyć PASUJ PRZECIW operatora.
Aby uzyskać kolumny, które nie pasują, po prostu umieść NOT przed następującym:WHERE textcolumn NOT LIKE "%SUBSTRING%"
.
To, czy w wyszukiwaniu jest rozróżniana wielkość liter, czy nie, zależy od tego, w jaki sposób przechowujesz dane, a zwłaszcza od używanej funkcji COLLATION. Domyślnie w wyszukiwaniu nie jest rozróżniana wielkość liter.
Zaktualizowana odpowiedź odzwierciedlająca aktualizację pytania:
Mówię, że robię WHERE field LIKE "%value%"
jest wolniejsze niż WHERE field LIKE "value%"
jeśli pole kolumny ma indeks, ale nadal jest to znacznie szybsze niż pobieranie wszystkich wartości i filtrowanie aplikacji. Oba scenariusze:
1/ Jeśli wykonasz SELECT field FROM table WHERE field LIKE "%value%"
, MySQL przeskanuje całą tabelę i wyśle tylko pola zawierające „wartość”.
2/ Jeśli wykonasz SELECT field FROM table
a następnie niech twoja aplikacja (w twoim przypadku PHP) filtruje tylko wiersze zawierające "wartość", MySQL przeskanuje również całą tabelę, ale wyśle wszystkie pola do PHP, który następnie musi wykonać dodatkową pracę. To znacznie wolniej niż w przypadku 1.
Rozwiązanie:użyj WHERE
klauzuli i użyj EXPLAIN
aby zobaczyć występ.