是否有一个SQL函数循环遍历数组以查看是否有任何元素在MYSQL行中?

时间:2014-11-11 11:05:38

标签: php mysqli tags

我有一个小的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)

如果一切正常,输入“ Gandalf是向导”应返回“ Potter ”一书。 因为“向导”是“ Potter ”图书的标记。

同时我正在接受它。 PHP函数“爆炸”是否会改变原始字符串或创建一个复制字符串?

提前致谢。

1 个答案:

答案 0 :(得分:2)

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

在你的book表中应该是一个唯一的id(主键,int,not 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关键字。

注意:

我一直在想,为什么很多开发人员都没有创建2个变量?

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

代替:$tags = explode(" ", $_GET["searchValue");