【发布时间】:2013-10-28 10:32:43
【问题描述】:
在我的网站上,我有一个系统可以对表 T.Categories 上的内容进行分类,该字符串看起来像
category1;category2;category3;category4
(可能或多或少)。
另一方面,我让我的用户选择他们感兴趣的类别。基本上,他们在表单上做出选择,结果列在 PHP 变量 $var 中,看起来像
category2','category4','category5
(等等)
通过请求
T.Categories IN ('".$var."'))";
我能够确定内容是否符合他们的兴趣,只有当内容归入一个单一类别时。
举例:
- 我有一张名为“猫”类别的照片
- 我的用户想要查看属于“猫”和“狗”类别的照片
- 我的 SQL 请求看起来像
SELECT * FROM T Where T.Categories IN ('".$var."'))";
实际上,我告诉 SGBD 观察 T.Categories 的内容是否在列表 $var 中
当 T.Categories 中只有一个类别时,它可以工作。 “Cat 在 $var 中吗?是的,Cat 在 'Cat','Dog' 中。然后我将内容提供给用户(因为 Cat 在 $var 中)”
但是如果 T.Categories 中有多个类别,它就不再起作用了。因为整个类别都存储在 category1;category2;category3;category4 的形式下。不高兴: 字符串 'Cat;Horse;Duck' 不在 'Cat','Dog' 中(MySQL 正在寻找整个字符串)
我需要将 Cat;Horse;Duck 分成三个部分进行解析,以使 SGBD 在 $var 列表中查找每个部分。 Cat IN $var 吗?是的,猫喜欢“猫”、“狗”。 马在 $var 中吗?不,马不喜欢“猫”、“狗”。 Duck 在 $var 中吗?不,鸭子不喜欢“猫”、“狗”。 然后我将内容提供给用户(因为 Cat 在 $var 中)。
我怎样才能使用一个请求来达到我的目标?
【问题讨论】:
标签: mysql string parsing in-clause