2014-12-10 4 views
0

У меня есть таблица с подстроками, и мне нужно выбрать все подстроки, которые находятся в строке поиска.SQL Query: "some string" LIKE "%" + column + "%"

В основном это была бы зеркальная форма где-условие:

WHERE "SearchString" LIKE "%"+ currentColumnValue +"%" 

Я знаю, что это невозможно, но по соображениям производительности я не хочу, чтобы перебирать каждую запись в базе данных.

Возможно, у вас есть идея, как решить эту проблему?

+1

Почему вы думаете, что это не возможно? –

ответ

3

Вы можете сделать

where 'SearchString' like concat('%', columnValue, '%'); 

Это будет очень медленно, так как он будет делать сканирование стол и как-сравнение на каждой строке, но результат является правильным.

http://sqlfiddle.com/#!2/e2b066/1

+0

Удивительный, вот и все! Как вы думаете? Лучше ли выполнять эту задачу на стороне MySQL или на PHP-стороне? – Robert

+1

Это лучше на стороне MySQL. Если вы делаете это в PHP, вам в основном нужно прочитать всю таблицу в PHP и фильтровать каждую строку. Добавленная стоимость - это сетевой трафик, который происходит перед фильтром. В MySQL вам по-прежнему приходится фильтровать каждую строку, но нет сети для строк, не соответствующих друг другу. –

0

Вы можете попробовать это

$value = //your value 

' select * from tb_name where col_name like %".$value."% ' 
+0

Извините, вы не поняли мой вопрос. Это обычный способ поиска. Я не ищу строку, содержащую мою строку поиска, но для строки, значение которой является подстрокой моей (гораздо более длинной) строки поиска. – Robert