У меня есть таблица с 2 столбцами с именами column_A и column_B.
Одна строка в этой таблице содержит в column_A значение AAA, а в column_B значение BBB.
Если я ищу AAA или BBB с
SELECT * FROM table WHERE column_A LIKE '%AAA%' OR column_B LIKE '%AAA%';
или же
SELECT * FROM table WHERE column_A LIKE '%BBB%' OR column_B LIKE '%BBB%';
Я получаю результат.
Однако, если я найду «% AAA BBB%» или «% AAA xyz%», я не получу никакого результата.
Значение, которое я ищу, исходит из формы поиска. Пока пользователь вводит только BBB или AAA, все в порядке, в тот момент, когда он использует комбинацию AAA или BBB и что-то еще, поиск не работает.
Как я могу это исправить? Нужно ли разделить поисковый термин, как упомянуто здесь: http://www.iamcal.com/publish/articles/php/search/
Так как вы пометили php, я могу предложить что-то вроде этого:
<?php
$res ="AAA BBB CCC";// your input from use
$res=explode(' ', $res);
$sql="SELECT * FROM table where column_A";
$flag=false;
for($i =0;$i< sizeof($res);$i++){
if(!$flag){
$flag=true;
$sql .=" like '%".$res[$i]."%'";
}else{
$sql .=" or like '%".$res[$i]."%'";
}}
echo $sql;// resultant sql need not to echo only to show
Вы можете сделать это с помощью регулярного выражения, как показано ниже, для поиска AAA или BBB в column_A:
SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$'
Спасибо за все комментарии, я, наконец, решил так:
$string = $_GET['searchterm'];
$words = EXPLODE(" ",$string);
FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";}
и затем добавил значение $ SQLOPTION в мой запрос.