【问题标题】:Displaying categories without repeating each that has posts显示类别而不重复每个有帖子的类别
【发布时间】:2012-04-22 16:31:28
【问题描述】:

我有 categories 表:

cat_id
cat_name

比分类-帖子关系表cat_rel

cat_rel_id
cat_id
post_id

posts表:

post_id
post_title
post_content

现在我在所有这些表中都有数据,我需要提取类别而不重复那些超过 1 个帖子的类别。如果它有超过 1 个帖子,我会以某种方式重复类别,例如。类别如:

php、python、c++、java、ruby

如果我有 2 个 PHP 下的帖子,我会得到:

php Python php 爪哇

这是我运行的查询:

SELECT categories.cat_name, cat_rel.post_id 
FROM categories 
LEFT JOIN cat_rel ON cat_rel.cat_ID = categories.cat_ID

任何关于使这些类别不再重复的帮助,将不胜感激

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    使用 DISTINCT

    看看这里: SQL SELECT DISTINCT Statement

    【讨论】:

      【解决方案2】:

      这将列出包含多个帖子的类别:

      SELECT  categories.cat_name as Category
      ,       count(distinct cat_rel.post_id) as PostCount
      FROM    categories 
      LEFT JOIN cat_rel 
      ON      cat_rel.cat_ID = categories.cat_ID
      GROUP BY categories.cat_name
      HAVING  count(distinct cat_rel.post_id) > 1
      

      【讨论】:

      • OP希望拉出所有类别而不重复那些超过1个帖子的类别,而不是拉出所有帖子超过1个的类别。
      • @MGA:那他为什么要加入cat_rel呢?只需select cat_name from categories 即可提取所有类别。
      • 我不知道,但这是他在问题中所说的,无论如何我认为您应该从查询中删除 HAVING count(distinct cat_rel.post_id) > 1
      • lol @Andomar 我只是看了一下代码,我发现简单的select cat_name from categories 可以工作,我不知道为什么我在这里加入这个表,我是个白痴
      【解决方案3】:

      试试这个:

      SELECT DISTINCT categories.cat_name, cat_rel.post_id 
      FROM categories 
      LEFT JOIN cat_rel ON cat_rel.cat_ID = categories.cat_ID
      

      【讨论】:

      • distinct 适用于所有列,因此distinct cat_name, post_id 仍会重复该类别
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多