代码之家  ›  专栏  ›  技术社区  ›  Adi Sembiring

具有多个类别的互异查询表

  •  0
  • Adi Sembiring  · 技术社区  · 15 年前

    我只想问问最佳实践

    我应该有三张桌子。帖子、类别、帖子类别。一个帖子可以有一个或多个类别

    post_id post_title      post_body
    1   title 1             body1
    2   title 2             body2
    

    类别

    cat_id  cat_name
    1       C#
    2       Java
    3       PHP
    

    职位类别

    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
    

    之后,我必须循环帖子,检查标题1是否还有任何类别。如果有,我必须把它临时调到某个变量。如果没有 我继续检查标题2的类别,并将其临时设置为某个变量

    毕竟,我会显示所有文章及其类别。

    有没有比我的代码更好的实践

    2 回复  |  直到 15 年前
        1
  •  2
  •   Leventix    15 年前

    你可以用 GROUP BY post_id 并且有一个 GROUP_CONCAT(cat_name SEPARATOR ', ') AS categories 在您选择列表中,但仅当您不想使用类别的ID时,例如使它们成为链接。

        2
  •  0
  •   Andomar    15 年前

    你所做的是很好的练习。

    您可以通过删除 posts_categories 表,只需将cat_id字段添加到post表。