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

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

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

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

«заголовок» — «автор» — «теги»

[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 «взорвать» исходную строку или создать копию строки после этого?

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

0

Решение

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

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

Например:

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

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 ключевое слово.

Замечания:

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

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

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

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]