我正在创建一个论坛,我希望将最新主题与其所属的类别并排显示。但是,当某人在同一类别中制作两次主题时,它会在两侧显示该类别,并在右侧显示不同的主题。
这有些正确,但我希望它只是一个类别。我为此尝试了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个类别应该显示。问题在主页和类别页面上都存在。
相关表格(图片):
答案 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