SQL SELECT DISTINCT不会返回不同的列

时间:2017-05-15 12:25:37

标签: php sql

我正在创建一个论坛,我希望将最新主题与其所属的类别并排显示。但是,当某人在同一类别中制作两次主题时,它会在两侧显示该类别,并在右侧显示不同的主题。

这有些正确,但我希望它只是一个类别。我为此尝试了SQL SELECT DISTINCT,但它似乎没有用,有人能告诉我语法是否有问题或者问题出在其他地方吗?

SELECT DISTINCT topics.topic_id, topics.topic_subject, topics.topic_by, categories.cat_id, categories.cat_name, categories.cat_description 
FROM topics JOIN categories ON topics.topic_cat = categories.cat_id 
ORDER BY topics.topic_date DESC LIMIT 3

此外,我想注意LIMIT 3的原因是因为这来自主页,其中只有3个类别应该显示。问题在主页和类别页面上都存在。

相关表格(图片):

Categories

Topics

2 个答案:

答案 0 :(得分:1)

在这种情况下,您不需要DISTINCT

要仅显示一个类别,您需要使用GROUP BY子句对主题进行分组。

尝试以下sql

SELECT  topics.topic_subject, topics.topic_by, categories.cat_name, categories.cat_description, count(categories.cat_name) 
FROM topics JOIN categories ON topics.topic_cat = categories.cat_id GROUP BY  categories.cat_name
ORDER BY topics.topic_date DESC LIMIT 3

答案 1 :(得分:0)

您为 topic_id列尝试 DISTINCT ,您需要将其更改为 topic_subject列

  

topic_id列看起来像auto_increment主键,所以它总是DISTINCT。

像这样改变

SELECT DISTINCT topics.topic_subject, topics.topic_id,
topics.topic_by, categories.cat_id, categories.cat_name, 
categories.cat_description 
FROM topics JOIN categories ON topics.topic_cat = categories.cat_id 
GROUP BY  categories.cat_name
ORDER BY topics.topic_date DESC LIMIT 3