是否有一个SQLI函数在数组中循环,以查看MYSQL行中是否有任何元素


Is there a SQLI function that cycles through an array to see if any elements are in a MYSQL row?

我有一个小SQL表。有一个"tags"列,其中有几个单词用逗号分隔。使用PHP&MYSQLI我想取一个搜索值,并将其单个单词与标记SQL"tags"列中的单个单词进行比较。

这是一个相对较小的数据库。我可以想出一种方法来做到这一点,我为每个标签创建一个单独的列。但我宁愿不要。只有当这是唯一的选择。

示例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)

如果一切正常,键入"Gandalf is a wizard"应返回书籍"Potter。因为"巫师"是《波特》一书的标签。

PHP函数"爆炸"会改变原始字符串还是创建一个复制字符串?

提前谢谢。

这是一个糟糕的设计。让我们在网上搜索数据库规范化。

在您的book表中应该有一个唯一的id(主键,int,而不是null,自动递增)字段。之后,您需要创建一个具有标记的关系表。

例如:

图书表:

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");