MySQL LIKE给出了错误的结果

时间:2013-07-31 19:24:25

标签: mysql comma

我想创建一个BLOG并创建两个表。

ID     Name of Category

我创建了文章表。

ID    CATEGORY_ID    ARTICLE

我将每篇文章添加到多个类别中,并将ID作为逗号分隔值保存在CATEGORY_ID字段中。即。

ID    CATEGORY_ID    Article
1     1,2,3          xyz

2     1,5            ghjy..............

3     2,4,6          hgyr..............

现在我希望在类别页面上发布这些文章。

$QUERY = "SELECT * FROM article_table WHERE category_id like '%category_id%' ORDER BY id DESC";

在上面的查询中一切都很好,直到有两个相同的类别。 所有类别为20,21,22,23等的文章也出现在2的类别页面上。我该如何避免这种情况。 '% - %'导致问题。

我的问题:我希望动态地在不同的页面上显示不同类别的文章。

任何人都可以帮忙???

2 个答案:

答案 0 :(得分:0)

如果您使用的是MySQL,可以使用FIND_IN_SET函数查看您希望找到的类别是否存在

尝试:

SELECT * FROM article_table WHERE FIND_IN_SET('searchForId', category_id) > 0 ORDER BY id DESC;

其中'searchForId'替换为您正在寻找的类别ID

答案 1 :(得分:0)

我建议您对表格进行规范化。你真正拥有的是一对多的关系,塞满了一张桌子。您的文章表可以简化为id和内容

ID    Article
1     xyz

2     ghjy..............

3     hgyr..............

然后创建第二个表来保存类别

ARTICLE_ID    CATEGORY_ID
1             1
1             2
1             3

2             1
2             5            

3             2
3             4
3             6

假设您将第二个表命名为article_category_map,则查询将为:

SELECT a.ID, acm.CATEGORY_ID, acm.Article
FROM article_category_map acm
inner join article_table a on acm.ARTICLE_ID = a.ID
WHERE acm.CATEGORY_ID = %category_id% 
ORDER BY a.id DESC