在我的网站上,我有一个系统可以对T.Categories
MySQL 字符串中的表上的内容进行分类,如下所示
category1;category2;category3;category4
(可能或多或少)。
另一方面,我让我的用户选择他们感兴趣的类别。基本上,他们在表单上做出选择,结果列在 PHP 变量中,$var
看起来像
category2','category4','category5
(ETC。)
通过请求
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 中)。
我怎样才能达到我的目标,使用一个单一的请求?