【发布时间】:2014-11-11 11:05:37
【问题描述】:
我有一个小的 SQL 表。 有一个“标签”列,其中有几个用逗号分隔的单词。 使用 PHP 和 MYSQLI 我想获取 Search Value 并将其单个词与标签 SQL 'tags' 列中的单个词进行比较。
这是一个相对较小的数据库。我可以想到一种方法来为每个标签创建一个单独的列。但我宁愿不要。只有当这是唯一的选择。
示例 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)
如果一切正常,输入“Gandalf is a wizard”应该会返回书“Potter”。 因为“Wizard”是“Potter”书的标签。
当我在做的时候。 PHP 函数是“爆炸”改变原始字符串还是创建一个复制字符串来改变它?
提前致谢。
【问题讨论】:
-
爆炸会从原件复制一份。但是为什么你不采取一个php循环呢?
-
您所做的是将一个漂亮而令人敬畏的数据库变成了一个大而精美的文本文件。为什么要将标签存储在列中?你刚刚开枪打中了自己的脚。我们的祖先开发人员创建了关系数据库,因此我们不必做您所做的事情。长话短说,您不创建列,也不与列进行比较。您创建另一个表甚至两个表。一个表存储标签,另一个表存储您的书籍,第三个表将书籍链接到标签。这就是我们处理数据建模的方式。如果你这样做了,你的问题就会消失。