2016-01-28 2 views
1

У меня есть проблема с функцией поиска, которую я создал.хранится с символом степени, иметь возможность поиска без, php SQL LIKE statement

У меня есть столбец в таблице тузд называется: название (utf8_swedish_ci)

Это 2 названия из около 20,000:

50° Riesling Réserve Trocken 
50° Parallel Riesling Trocken 

Является там каким-то образом я могу заставить его работать на пользователя на поиск 50 Riesling или 50 Parallel, то есть без символа степени?

Мой код:

$search = str_replace("\'","’", $_GET['searchString']); 
$search = htmlentities($search); 
$search = esc_sql($search); 
$search = trim($search); 
if(!empty($_GET["searchString"])){ 
    $str .= "`title` LIKE '%".$search."%' AND "; 
} 

SQL Statement (часть его, относительно этого):

$res = $wpdb->get_results("SELECT * FROM searchtbl WHERE ".$str." ORDER BY ".$sortby." ".$sort." LIMIT 500"); 

В качестве дополнительного вопроса: Есть некоторые "легкий" способ, чтобы пользователь смог искать 50 рислинга и найти оба предмета? (Его отношение к многим титулов не только эти два)

Заранее спасибо

+0

Это не будет делать чудеса для производительности, но вы можете разделить строку поиска и построить запрос с условием 'LIKE' для каждого слова. – jeroen

ответ

1

У вас есть несколько вариантов, которые вы можете комбинировать для достижения желаемого результата.

  1. Создать еще одно поле в таблице, в которой хранятся названия без автомобилей специального назначения символов, таких как ° и ваш запустить SERACH на обеих колонках или вы удаляете специальные символы из seraches а. Если у вас есть mysql v5.7.6 или новее, то использование сгенерированных столбцов является идеальным решением для этого.

  2. Вы можете удалить эти специальные символы «на лету», выполнив поиск по критериям. Опять же, созданные столбцы, вероятно, будут более быстрым решением.

  3. Использовать полнотекстовый индекс и искать. Однако вам нужно уменьшить минимальную длину слова по умолчанию до 2, и вам, вероятно, придется поиграть с файлом сортировки. This SO topic содержит дополнительную информацию об этом.

  4. Вы можете разбить строку поиска на слова в php, например, используя explode() и serach для слов не в одном критерие serach, а в отдельных.

Преимущество последних двух подходов состояло в том, что они найдут обе записи, если 50 критериями поиска являются критерии поиска.

+0

Спасибо за хороший ответ, работая со старым поисковым приложением. Планирование перестроить его с его низкой производительности. – user2957788

0

Вы можете использовать REPLACE() для удаления степени символов из столбца, против которого вы сравниваете строку ввода:

SELECT * 
FROM searchtbl 
WHERE REPLACE(title, '°', '') LIKE '50 Riesling' 

Вы можете попробовать подобный подход, если у вас есть другие проблемные символы. Я упустил PHP-код, но я оставлю это вам как упражнение.

 Смежные вопросы

  • Нет связанных вопросов^_^