2017-02-03 7 views
1

Я пытаюсь создать функцию поиска на своем веб-сайте с помощью PHP и SQL. Я пытаюсь сделать так, чтобы, когда я поиск ключевого слова в нем отображаются элементы, соответствующие ключевые словаSQL Поиск по ключевому слову

Это мой Database

Если я был поиск «риса курица» он вернется бы как Davida и roys, я бы хотел, чтобы он возвращал Davids только в том случае, если он соответствует обоим словам, а не roys, поскольку roys только соответствует рис.

Thos - это мой текущий код.

$search = $_GET['query']; 

mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("axamenu"); 

$query = mysql_query("SELECT * FROM menu WHERE CONTAINS(items,'$.search')"); 
if(mysql_num_rows($query) >= 1) { 
    while($a = mysql_fetch_array($query)) { 
     echo "<a href='".$a['profileurl']."'>".$a['restaurant']."</a><p>".$a['menutype']."</p><hr/>"; 
    } 

} else { 
    echo "Oh no! Nothing was found."; 
} 
+0

показать свою таблицу архитектуру с данными ..... что будет лучше, чтобы решить вашу проблему –

+1

Почему вы не использовать предметы, как «%%„ $ поиска.“ '? У вас проблемы с? – rahulsm

+3

1. ** Не ** используйте ** устаревшие и небезопасные функции '' mysql_ * '. Они устарели со времен PHP 5.5 (в 2013 году) и полностью удалены в PHP 7. Вместо этого используйте MySQLi или PDO. 2. ** Вы широко открыты для [SQL Injections] (http://php.net/manual/en/security.database.sql-injection.php) ** и должны действительно использовать [Подготовленные утверждения] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) вместо объединения ваших запросов, которые могут использоваться, если вы используете вышеупомянутый MySQLi или PDO. –

ответ

-2

Попробуйте это и позвольте нам, если это сработает.

select * from table_name where items like 'rice%' or items like 'chicken%'; 
+0

Рассматривая вопрос, это не будет делать то, что просит ОП. –

+0

Не нужно пропустить, если это не сработает, он должен быть тем, кто добавит комментарий :( –

+1

Это не то, как работает этот сайт. Если кто-то видит, что ответ явно ошибочен (не решая актуального вопроса) + не объясняет ничего о _why_ OP должен попробовать это, тогда вы на самом деле _should_ downvote его. Это сообщество, и мы все помогаем отсеять хорошие и плохие ответы. –

0

Вы можете сделать запрос таким образом

$where = ''; 
$string = "thi sdas asd"; 
$search = explode(" ",$string); 
if(sizeof($search)>1) 
{ 
$where = "1=1"; 
    foreach($search=>$key as $val){ 
     $where .= "or items like %".$val."%"; 
    } 
} 
else 
{ 

$where = "items like %".$search[0]."%" 
} 

$query = mysql_query("SELECT * FROM menu WHERE ".$where); 
//rest of your code goes here 

Примечание: Прекратить использование устаревшей и небезопасной MySQL _ * - функции. Они устарели со времен PHP 5.5 (в 2013 году) и полностью удалены в PHP 7. Вместо этого используйте MySQLi или PDO

0

Если вам нужен только результат davids как «рисовая курица», , вы можете разделить свою строку как рис и курица и запрос в

SELECT * from menu WHERE items REGEXP 'rice' AND items REGEXP 'chicken'

вы получите только один результат

Примечание: использование REGEXP может замедлить Дау п результата для извлечения данных сыпучих

0
$search = $_GET['query']; 

mysql_connect("localhost", "root", "") or die(mysql_error()); 
mysql_select_db("axamenu"); 

$query = mysql_query("SELECT * FROM menu WHERE 
items LIKE '%".$search."%'"); 
if(mysql_num_rows($query) >= 1) 
{ 
    while($a = mysql_fetch_array($query)) 
    { 
     echo "<a href='".$a['profileurl']."'>".$a['restaurant']."</a><p>".$a['menutype']."</p><hr/>"; 
    } 

} 
else 
{ 
    echo "Oh no! Nothing was found."; 
} 
Смежные вопросы