Чтобы быть ясным, мне нужно искать таблицу в базе данных, в частности поле, называемое tags
которое определяется как текст. В базу данных я вводил эти теги в качестве строки, а затем я взорвал/деля эту строку меток методом explode()
в массив в php
. Но для поиска нескольких "тегов" в форме мне нужно ввести несколько тегов, разделенных пробелом, а затем на #.
Проблема в том, что я не знаю, как сообщить базе данных игнорировать порядок введенных тегов и отображать все изображения, содержащие введенные теги, в форме поиска, игнорируя порядок введенных тегов. До сих пор мне удалось найти только фотографии, где были теги.
Я попытался сделать это таким образом, но это не сработало
$search_string = $_POST['search'];
$exploded_search_string = explode(" ", $search_string);
$sql_search = "SELECT * FROM pictures
WHERE tags LIKE '%".$exploded_search_string."%'
ORDER BY ID_picture DESC";
Я думаю, вы могли бы сделать что-то вроде этого
WHERE tags LIKE $exploded_search_string[0]%' OR tags LIKE '%$exploded_search_string[1]%'
OR
WHERE tags REGEXP '$exploded_search_string[0]| $exploded_search_string[1]'
Вы можете $exploded_search_string
массив $exploded_search_string
чтобы создать оператор SQL, как указано выше, и ваш запрос выбора должен найти все теги, найденные в БД.
После того, как вы сможете получить результаты, используя вышеуказанный оператор, вы можете проверить поиск по FULL TEXT для оптимизированного решения.
Вы не говорите, какую базу данных вы используете. Предполагая, что вы используете MySQL, вы можете взглянуть на полнотекстовый поиск.
Кроме того, вам следует рассмотреть возможность использования PDO, чтобы вы могли использовать подготовленные инструкции, чтобы предотвратить атаки SQL-инъекций.
если ваши теги идентичны тегам в db, используйте IN вместо LIKE
$sql_search = "SELECT * FROM pictures
WHERE tags IN ($exploded_search_string)
ORDER BY ID_picture DESC";