Поиск в базе данных по строке, разнесенной в массив

0

Чтобы быть ясным, мне нужно искать таблицу в базе данных, в частности поле, называемое 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";
  • 0
    То, как вы строите свой SQL-запрос, открыто для внедрения SQL-кода. Пожалуйста, используйте подготовленные операторы, проверьте ответ
  • 0
    Explode разбивает строку на массив. Не строка
Показать ещё 1 комментарий
Теги:

3 ответа

0
Лучший ответ

Я думаю, вы могли бы сделать что-то вроде этого

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 для оптимизированного решения.

0

Вы не говорите, какую базу данных вы используете. Предполагая, что вы используете MySQL, вы можете взглянуть на полнотекстовый поиск.

Кроме того, вам следует рассмотреть возможность использования PDO, чтобы вы могли использовать подготовленные инструкции, чтобы предотвратить атаки SQL-инъекций.

0

если ваши теги идентичны тегам в db, используйте IN вместо LIKE

  $sql_search = "SELECT * FROM pictures 
           WHERE tags IN ($exploded_search_string) 
           ORDER BY ID_picture DESC";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню