@anton99zel
29а класс средней школы №7

Как правильно организовать поиск одной строкой, не разбирая к какому полю относится поисковое слово?

Хотел сделать одну поисковую строку для пользователя, которая ищет по некоторым полям таблицы.
Если искать по одному полю, то выдает корректный результат, но как добавляю остальные поля, то в результат попадает что угодно. Например, ищем Екатеринбург, в столбике HOUSE есть такой город. Если оставить поиск только по HOUSE, то отбор произойдет верный, добавляю остальные поля для поиска - и уже Екатеринбург не выходит в результатах. Выходят вообще другие города.
php pdo
$poisk = "Екатеринбург";
$limit = 5;
$user= 90;
----------------------------------
WHERE 
orders.USER = $user
AND orders.DID IS NOT NULL
AND (catalog.NAME LIKE CONCAT('%', :name, '%')
OR orders.MID = :mid
OR orders.ARTICLE = :artikul
OR orders.HOUSE =:house
OR orders.DID =:did
OR orders.NUMBER =:num)
ORDER BY orders.DATE $sort
LIMIT $limit 

	$sth->bindParam(":name", $poisk, PDO::PARAM_STR);
	$sth->bindParam(":mid", $poisk, PDO::PARAM_INT);
	$sth->bindParam(":did", $poisk, PDO::PARAM_INT);
	$sth->bindParam(":num", $poisk, PDO::PARAM_INT);
	$sth->bindParam(":artikul", $poisk, PDO::PARAM_STR);
	$sth->bindParam(":house", $poisk, PDO::PARAM_STR);
	$sth->execute();

Как правильно организовать поиск одной строкой, не разбирая к какому полю относится поисковое слово?
  • Вопрос задан
  • 80 просмотров
Решения вопроса 1
tsklab
@tsklab
Здесь отвечаю на вопросы.
CONCAT_WS( ' ', ' ', catalog.NAME, orders.MID, orders.ARTICLE, 
      orders.HOUSE, orders.DID, orders.NUMBER, ' ' ) 
  LIKE CONCAT('% ', :poisk, ' %')
Разделитель не даст значениям полей "слипнуться".
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
iMedved2009
@iMedved2009
Не люблю людей
ну это логично дом в какой нибудь Москве попадет потому что OR сработает - а дата заказа выше чем у Екатеринбурга. В сортировке можно организовать приоритеты если городу нужно дать приоритет то:

ORDER BY (orders.HOUSE = :house) desc, orders.DATE $sort
Ответ написан
Комментировать
402d
@402d
начинал с бейсика на УКНЦ в 1988
правильно ставьте OR AND и круглые скобки.
LIKE это первое через что начинающий разработчик пробуют сделать поиск

вторая стадия
https://habr.com/ru/post/40218/

А в конце прикручивает сфинкс или мантикору
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы