Я пытаюсь создать поисковую систему в php и mysql. Поисковая система должна иметь возможность принимать несколько значений и отображать все возможные результаты, я проверил этот поток php / mysql для поиска нескольких значений , но мне нужно использовать глобальную переменную в том месте, где LIKE '$search%'
. Вот как выглядит мое заявление sql,
SELECT name FROM product WHERE name LIKE '%$search%
переменный поиск объявлен правильно, теперь все работает отлично, когда я ищу конкретно, например, в цепочке Gold будет отображаться цепочка Gold. Но когда я ищу другое имя вместе с такой Gold Chain Shirt, где рубашка – это другое имя продукта, результат не отображается. Как мне изменить мою команду sql, чтобы получить несколько результатов из нескольких значений? Мне очень жаль, что я не сказал ранее, что меня попросили сделать это в трех уровнях программирования.
Здесь есть достойная статья, которая даст вам достойное введение в поиск MySQL с PHP, но в основном вы хотите разделить свою поисковую фразу на части и затем использовать их в запросе MySQL. Например:
<?php $search = 'Gold Chain Shirt'; $bits = explode(' ', $search); $sql = "SELECT name FROM product WHERE name LIKE '%" . implode("%' OR name LIKE '%", $bits) . "%'";
Вышеприведенный запрос будет генерировать этот запрос:
SELECT name FROM product WHERE name LIKE '%Gold%' OR name LIKE '%Chain%' OR name LIKE '%Shirt%'
Вам действительно нужно посмотреть индексацию FULLTEXT , а затем прочитать о выражениях запроса FULLTEXT .
Если я правильно вас понял, вы хотите найти все предметы, которые имеют ценность «Золотая цепочка» или «Рубашка». В этом случае, когда вы помещаете вопрос как «php», вы можете сделать это, изменив $search
как общее предложение WHERE. Я делаю это таким образом (пример с указанием разных условий для объяснения идеи):
$search_array=array('name LIKE "%Gold Chain%"', 'price > 5'); $where=implode($search_array,' OR '); // you might wish ' AND ' some_function_to_query('SELECT name FROM product WHERE '.$where);
Вы можете улучшить свой поиск, выполнив: «% $ search» для поиска только с начала строки, чтобы получить больше результатов.
Если вы хотите найти каждое слово из предложения, вы можете сделать следующее:
$search = 'Gold Chain Shirt'; $searches = explode(' ', $search); $query = "SELECT * FROM product WHERE name "; foreach($searches as $word) { $query .= "LIKE '%{$word}' OR "; }