Есть ли функция SQLI, которая циклически перебирает массив, чтобы увидеть, есть ли какие-либо элементы в строке MYSQL?

0

У меня небольшая таблица SQL. Существует столбец "теги", в котором есть несколько слов, разделенных запятой. Используя PHP и MYSQLI, я хотел бы взять значение поиска и сравнить его отдельные слова с отдельными словами в теге SQL-тегов.

Это относительно небольшая база данных. Я могу придумать, как это сделать, когда я создаю отдельный столбец для каждого тега. Но я бы предпочел. Только если это единственный вариант.

Пример макета SQL, таблица: книги

"title" - "author" - "tags"

[Potter]-- [J.K.] -- [Wizards, WandsnShit,Magic]

[50 shades]-- [James] -- [Boobies, Sex]

[Ulysses]-- [Joyce] -- [WTF]

Пока мое направление было:

//obtains searchValue from HTML
$searchValue=$_GET["searchValue"];

//turns the values individual words into an array
$proxy = $searchValue;
$tags = explode(" ", $proxy);

//This is where I need help
SELECT * FROM books WHERE tags CONTAINS (cycle through 'tags' array)

Если все работает правильно, набрав " Гэндальф - волшебник ", следует вернуть книгу " Поттер ". Потому что " Мастер " - это тег книги " Поттер ".

И пока я нахожусь в нем. Может ли функция PHP "взорваться" изменить исходную строку или создать строку с копией?

Заранее спасибо.

Теги:
tags
mysqli

1 ответ

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

Это плохой дизайн. Пусть поиск в сети для нормализации базы данных.

В вашей таблице книг должно быть уникальное поле id (первичный ключ, int, а не null, auto increment). После этого вам нужно создать таблицу отношений, в которой есть теги.

Например:

Книжный стол:

id
name
author

Таблица тегов

id
book_id
tag

После этого вы можете использовать:

$sql = "SELECT * FROM books"
    . " INNER JOIN tags ON tags.book_id = books.id"
    . " WHERE tags.tag = " . mysqli_real_escape_string($_GET["searchValue"]);

Или вы можете использовать ключевое слово LIKE.

Заметка:

Мне всегда интересно, почему многие разработчики создают две переменные ни для чего?

$searchValue=$_GET["searchValue"];
//turns the values individual words into an array
$proxy = $searchValue;
$tags = explode(" ", $proxy);

вместо: $tags = explode(" ", $_GET["searchValue");

  • 0
    очень признателен
  • 0
    Добро пожаловать.
Показать ещё 2 комментария

Ещё вопросы

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