Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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
Mysql集合与PHP查询子集_Php_Mysql_Set - Fatal编程技术网

Mysql集合与PHP查询子集

Mysql集合与PHP查询子集,php,mysql,set,Php,Mysql,Set,我有一个基本的mysql数据库,并使用php作为android应用程序的web服务。我的应用程序中有21个类别,我将它们作为Mysql集存储在数据库的一列中。一篇文章可以有多个类别 我让用户选择一个或多个类别。现在,我将所有选定的类别作为硬编码的“字符串”值发送,并将它们连接起来,如下所示 从……….中选择*。。。。。。。。。。。其中猫喜欢“%$cat1%”或猫喜欢“%$cat2%” 你可以猜到这是一个非常低的过程 正确的方法是什么 创建一个类别表、一个项目表和一个只包含外键的联合表,以便在多个

我有一个基本的mysql数据库,并使用php作为android应用程序的web服务。我的应用程序中有21个类别,我将它们作为Mysql集存储在数据库的一列中。一篇文章可以有多个类别

我让用户选择一个或多个类别。现在,我将所有选定的类别作为硬编码的“字符串”值发送,并将它们连接起来,如下所示

从……….中选择*。。。。。。。。。。。其中猫喜欢“%$cat1%”或猫喜欢“%$cat2%”

你可以猜到这是一个非常低的过程


正确的方法是什么

创建一个类别表、一个项目表和一个只包含外键的联合表,以便在多个类别中定位项目。

最正确的方法是重新设计您的模式,创建三个表:
项目
类别
、和
项目类别
。前两个表正是您所期望的(文章-类别数据和集合的内容)。第三个表将映射唯一的articleID类别ID关系。那么,加入就很简单了:

SELECT * FROM Articles JOIN ArticleCategories USING (articleID)
    JOIN Categories USING (categoryID)
WHERE
    catName LIKE '%$cat1%' OR catName LIKE '%$cat2%'

我也有点不清楚为什么你需要像一样使用
,因为你似乎暗示用户必须选择你给他们的类别,而不是键入它们。如果您没有像使用
那样使用
,那么您可以在
中使用作为类别列表。

我猜您的意思是“缓慢的过程”。什么过程比较慢?查询执行时间或创建查询?我只知道php执行此查询和其他事情太慢。我使用了FIND_IN_SET(),但仍然很慢。我想我会改变模式。但是,还有没有办法用布景做到这一点呢?