1

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

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

SELECT * FROM ...... WHERE 猫喜欢 '%$cat1%' 或猫喜欢 '%$cat2%'

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

这样做的正确方法是什么?

4

2 回答 2

0

仅使用外键制作类别表、文章表和联合表,以在多个类别中定位文章。

于 2013-02-20T00:03:14.157 回答
0

最正确的方法是重新设计架构以创建三个表:ArticleCategoryArticleCategories。前两个表正是您所期望的(文章 - 类别数据和您的集合的内容)。第三个表将映射唯一的 articleID-categoryID 关系。然后,加入很简单:

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

我也有点不清楚为什么需要使用LIKE,因为你似乎暗示用户必须选择你给他们的类别而不是输入它们。如果你不使用LIKE,那么你可以只使用IN类别列表.

于 2013-02-20T00:03:41.863 回答