Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/246.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否有一个SQLI函数可以在数组中循环以查看MYSQL行中是否有任何元素?_Php_Mysqli_Tags - Fatal编程技术网

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

Php 是否有一个SQLI函数可以在数组中循环以查看MYSQL行中是否有任何元素?,php,mysqli,tags,Php,Mysqli,Tags,我有一个小的SQL表。 有一个“tags”列,其中有几个用逗号分隔的单词。 使用PHP和MYSQLI,我想获取一个搜索值,并将其单个单词与标记SQL“tags”列中的单个单词进行比较 这是一个相对较小的数据库。我可以想出一种方法,为每个标记创建一个单独的列。但我宁愿不要。除非这是唯一的选择 示例SQL布局, 表:书籍 “标题”--“作者”--“标记” 到目前为止,我的方向是: //obtains searchValue from HTML $searchValue=$_GET["searchVa

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

这是一个相对较小的数据库。我可以想出一种方法,为每个标记创建一个单独的列。但我宁愿不要。除非这是唯一的选择

示例SQL布局, 表:书籍

“标题”--“作者”--“标记”

到目前为止,我的方向是:

//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函数“explode”是改变原始字符串还是创建一个复制字符串


提前谢谢。

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

在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"]);
或者您可以使用
类似的
关键字

注意:

id
name
author
我一直在想,为什么很多开发人员会白白创建2个变量

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

相反:
$tags=explode(“,$\u GET[“searchValue”)

爆炸将从原始文件复制。但是为什么不进行php循环呢?你所做的是将一个很棒的数据库变成一个大的、美化的文本文件。你为什么要将标记存储在一列中?你只是击中了自己的脚。我们的祖先开发人员创建了关系数据库,所以我们不必像你那样做。朗简言之,您不创建列,也不与列进行比较。您创建了另一个表,甚至两个表。一个表存储标记,另一个表存储书籍,第三个表将书籍链接到标记。这就是我们处理数据建模的方式。如果您这样做,您的问题就会迎刃而解。更改为
WHERE tags.tag
以停止confusion和
内部联接