具有多个类别的独特查询表

时间:2010-02-06 10:21:32

标签: sql mysql

我只想问最佳实践

我猜有三张桌子。帖子,类别,post_Categories。一个帖子可以有一个或多个类别

发布

post_id post_title      post_body
1   title 1             body1
2   title 2             body2

分类

cat_id  cat_name
1       C#
2       Java
3       PHP

posts_categories

pc_id   pc_post pc_cat
1       1       1
2       1       2
3       1       3
4       2       2
5       2       3

我想显示所有帖子及其分类。我可以显示这样的帖子列表

title 1
body1
category(C#, Java, PHP)

-----------
title 2
body2
category(Java, PHP)

所以我必须创建这样的查询。

SELECT post_id, post_title, post_body, cat_id, cat_name  
FROM posts p INNER JOIN post_categories pc ON  p.post_id = pc.pc_post
INNER JOIN categories c ON c.cat_id = pc.cat_id

the result is 
1   title 1             body1   1   C#
1   title 1             body1   2   Java
1   title 1             body1   3   PHP
2   title 2             body2   2   Java
2   title 2             body2   3   PHP

之后,我必须循环帖子,并检查title1是否仍然有任何类别。如果有,我必须把它变成一些变量。如果不 我继续检查title2的类别并将其临时变为某个变量

毕竟,我显示所有帖子及其类别。

有没有比我的代码更好的做法

2 个答案:

答案 0 :(得分:2)

您可以使用GROUP BY post_id并在选择列表中添加GROUP_CONCAT(cat_name SEPARATOR ', ') AS categories,但前提是您不想使用类别ID,例如让他们联系。

答案 1 :(得分:0)

你正在做的是良好的做法。

您可以通过删除posts_categories表来简化,只需将cat_id字段添加到Post表中。