Bem, você sempre pode tentar
WHERE textcolumn LIKE "%SUBSTRING%"
- mas isso certamente será bastante lento, pois sua consulta não pode fazer uma correspondência de índice porque você está procurando por caracteres no lado esquerdo. Depende do tipo de campo - uma área de texto geralmente não será salva como VARCHAR, mas sim como (uma espécie de) campo TEXT, então você pode usar o COMBINAR CONTRA operador.
Para obter as colunas que não correspondem, basta colocar um NOT na frente de:
WHERE textcolumn NOT LIKE "%SUBSTRING%"
. Se a pesquisa diferencia maiúsculas de minúsculas ou não, depende de como você armazena os dados, especialmente qual COLLATION você usa. Por padrão, a pesquisa não diferencia maiúsculas de minúsculas.
Resposta atualizada para refletir a atualização da pergunta:
Eu digo que fazer um campo
WHERE field LIKE "%value%"
é mais lento que WHERE field LIKE "value%"
se o campo da coluna tiver um índice, mas isso ainda é consideravelmente mais rápido do que obter todos os valores e ter o filtro do aplicativo. Ambos os cenários:1/ Se você fizer
SELECT field FROM table WHERE field LIKE "%value%"
, o MySQL varrerá toda a tabela e enviará apenas os campos contendo "valor". 2/ Se você fizer
SELECT field FROM table
e, em seguida, faça com que seu aplicativo (no seu caso PHP) filtre apenas as linhas com "valor" nele, o MySQL também verificará a tabela inteira, mas enviará todos os campos para o PHP, que terá que fazer um trabalho adicional. Isso é muito mais lento do que o caso #1. Solução:Por favor, use o
WHERE
cláusula e use EXPLAIN
para ver o desempenho.