【发布时间】:2016-12-05 17:27:00
【问题描述】:
我正在尝试构建一个论坛网站,该网站使用 PHP 和 MySQL 数据库来存储其类别和主题内容。在主页上,我想要一个表格,显示所有类别的列表以及每个类别中最近发布的主题。
我想编写一个查询,它返回类别表中的所有类别以及主题表中每个类别的最新主题。
我的表格如下所示:
分类
+--------+-------------+--------------------------+
| cat_id | cat_name | cat_description |
+--------+-------------+--------------------------+
| 1 | Automobiles | *Tim Taylor manly grunt* |
| 2 | English | How to English |
| 3 | Gardening | Lawn and Order |
+--------+-------------+--------------------------+
主题
+----------+-----------------------+------------------------+-----------+----------+
| topic_id | topic_name | topic_content | topic_cat | topic_by |
+----------+-----------------------+------------------------+-----------+----------+
| 1 | '67 Chevy Question | Weird knocking noise? | 1 | 1 |
| 2 | You're vs Your | What's the difference? | 2 | 3 |
| 3 | Jumper cables? | The proper hookup | 1 | 2 |
| 4 | '03 Pathfinder | Next newest model? | 1 | 1 |
| 5 | There, Their, They're | Know the difference | 2 | 4 |
+----------+-----------------------+------------------------+-----------+----------+
我在技巧 #3 下的 https://stackoverflow.com/a/12586263/7249891 上找到了相关答案,但经过几个小时的摆弄,我无法将其归结为适合我的查询。
我的问题是,如何调整我的原始查询
SELECT c.cat_name AS Category, t.topic_cat AS Recent Topic
FROM categories c
JOIN topics t
WHERE c.cat_id = t.topic_cat
所以它返回数据库中的所有类别,但在类似于此的结果中只返回每个类别中的最新主题
+-------------+-----------------------+
| Category | Recent Topic |
+-------------+-----------------------+
| Automobiles | '03 Pathfinder |
| English | There, Their, They're |
| Gardening | NULL |
+-------------+-----------------------+
说明: 在这个论坛中,管理员创建了几个类别,任何用户都可以在其中发布主题。
在主题中,主题主题是用户提出的问题,主题内容是关于该问题的附加信息。
Cat_id 和 topic_id 都是自增主键。
Topic_subject 是引用 cat_id 的外键。
假设由于主键行为,主题表中的最新主题是具有最高 topic_id 编号的主题。此表中还有一个日期字段(我意识到最后一分钟我忘了包括在这里)。
还有两个我没有在这里列出的表:用户表和回复表。 topic_by 是引用 users 表的外键。
如果某个类别(我上面的示例中的园艺类别)中没有主题,我们将假设程序的 PHP 部分将使列表中的该部分显示为“(无)”。
【问题讨论】:
标签: mysql