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