2014-12-02 2 views
0

У меня есть таблица с 2 столбцами с именем column_A и column_B.sql поиск с похожими или содержит

Одна строка в этой таблице содержит в столбце_А значение AAA и столбец_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%'; 

я получаю результат.

Однако, если я serach для '% AAA BBB%' или '% AAA xyz%', я не получаю результата.

Ценность, которую я ищу, получена из формы поиска. До тех пор, пока пользователь вводит только BBB или AAA, все в порядке, в тот момент, когда он использует комбинацию AAA или BBB и что-то еще, поиск не работает.

Как я могу это исправить? http://www.iamcal.com/publish/articles/php/search/

+0

Вам нужно разделить поисковый запрос или использовать полнотекстовый поиск. –

+0

Вы можете сослаться на http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html ссылку для полнотекстового поиска –

+0

'% AAA xyz% означает, что вы ищете «AAA xyz» + что-то не «AAA» или «xyz» –

ответ

0

Поскольку вы помеченной 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 
+0

Это очень похоже на мое решение, поэтому вы получаете мой голос. Благодаря! – pixi

2

Вы можете сделать это с регулярным выражением, как показано ниже, чтобы искать либо для AAA или BBB в column_A:: мне нужно разделить искомый термин, как упомянуто здесь ли

SELECT * FROM table WHERE column_A REGEXP '.*[A|B]{3}.*$' 
0

Спасибо за все комментарии, я наконец-то решена так:

$string = $_GET['searchterm']; 

$words = EXPLODE(" ",$string); 

FOR($i=0;$i<count($words);$i++){$SQLOPTION .= "AND CONCAT(column_A,column_B) LIKE '%".$words[$i]."%'";} 

, а затем добавили значение $ SQLOPTION в мой запрос.

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