У меня есть небольшая таблица 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 «взорвать» исходную строку или создать копию строки после этого?
Заранее спасибо.
Это плохой дизайн. Давайте искать в сети для нормализации базы данных.
В вашей книге должно быть поле уникального идентификатора (первичный ключ, 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");
Других решений пока нет …