Запрос Mysqli: поиск в обоих столбцах либо по значению, либо по комбинации

Я обновляю свой сайт квадрокоптера и улучшаю свою систему поиска. В настоящее время пользователь может осуществлять поиск только по модели квадрокоптера. Сейчас я немного улучшаю это, чтобы пользователь мог искать марку или модель.

Я хотел бы, чтобы пользователь мог ввести марку и модель в поле поиска и разрешить проверку обоих слов между любой записью в БД.

По сути, скажем, марка квадрокоптера — «DJI», а модель — «Фантом», в моей базе данных один будет храниться под брендом «столбец», а другой — под «моделью». Я хотел бы, чтобы пользователь мог ввести «фантом dji» и показать модель.

Если это невозможно, то есть ли способ показать результат, даже если он не точен? С помощью моего поля поиска в настоящее время вы можете искать квадрокоптер, если оно содержит полную часть строки. Например, «завод» покажет «DJI Phantom», а «антон»

Вот мой запрос:

$search = $_GET['search'];

$search_list = mysqli_query($conn,"SELECT * FROM quads WHERE model LIKE '%$search%' OR brand LIKE '%$search%'");

PS (я знаю, что он уязвим для инъекций; это я исправлю на этой неделе, спасибо).


person Bradley    schedule 14.11.2016    source источник
comment
@JoseManuelAbarcaRodríguez Да, если ввести только марку, то появится квадрокоптер, как если бы пользователь ввел только модель. Если пользователь вводит и марку, и модель, например «dji phantom», он не отображается.   -  person Bradley    schedule 14.11.2016
comment
Как узнать, что пользователь ввел только марку, а не только модель?   -  person Jose Manuel Abarca Rodríguez    schedule 14.11.2016
comment
Когда я сам пробую веб-сайт, если я ввожу DJI, квадрокоптер показывает, однако, если я ввожу и марку, и модель, он не отображается.   -  person Bradley    schedule 14.11.2016
comment
DJI будет соответствовать бренду, в то время как Phantom будет соответствовать модели, но DJI Phantom не будет соответствовать ни модели, ни бренду. Не могли бы вы разделить текст поиска, а затем попытаться увидеть, есть ли совпадение в БД?   -  person Maximus2012    schedule 14.11.2016
comment
@Maximus2012 Это то, что я хотел бы сделать, вы объяснили это так, как мне нужно. Я потратил около часа на изучение этого, но мне не повезло   -  person Bradley    schedule 14.11.2016
comment
Попробуйте использовать CONCAT, чтобы добавить еще одно условие поиска в дополнение к тому, что у вас уже есть? stackoverflow.com/questions/303679/ Даже если это сработает, это сработает только в конкретном случае, когда пользователь вводит что-то вроде DJI Phantom, но это должно быть хорошим началом.   -  person Maximus2012    schedule 14.11.2016
comment
@Maximus2012 Честно говоря, это прекрасно, когда они входят в DJI Phantom, это теперь видно. Еще одна вещь, чтобы улучшить его еще больше, можно ли показать DJI Phantom, скажем, если была введена орфографическая ошибка, например DJI Phontom?   -  person Bradley    schedule 14.11.2016
comment
Это сложно. В MySQL нет ничего подобного, поэтому вам, возможно, придется написать свой собственный алгоритм, или вы можете заглянуть в Lucene или Elasticsearch, чтобы узнать, есть ли у них такая функция. elastic.co/guide/en/elasticsearch/ ссылка/текущая/ quora.com/   -  person Maximus2012    schedule 14.11.2016
comment
Подобно CONCAT, но работа над вставкой, а не выбором, заключается в создании столбца search_string с маркой и моделью и, возможно, серийным номером. Иногда я также видел ожидаемые частичные совпадения. Затем вы также можете explode(' ', $search), если хотите проверить токены в строке поиска независимо.   -  person Jerry    schedule 14.11.2016