我正在尝试构建一个论坛网站,该网站使用 PHP 和 MySQL 数据库来存储其类别和主题内容。在主页上,我想要一个表格,显示所有类别的列表以及每个类别中最近发布的主题。
我想编写一个查询,该查询返回类别表中的所有类别,并且仅返回主题表中每个类别的最新主题。
我的桌子看起来像这样:
类别
+--------+-------------+--------------------------+
| cat_id | cat_name | cat_description |
+--------+-------------+--------------------------+
| 1 | Automobiles | *Tim Taylor manly grunt* |
| 2 | English | How to English |
| 3 | Gardening | Lawn and Order |
+--------+-------------+--------------------------+
topics
+----------+-----------------------+------------------------+-----------+----------+
| 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 |
+----------+-----------------------+------------------------+-----------+----------+
我找到了相关答案https://stackoverflow.com/a/12586263/7249891 https://stackoverflow.com/a/12586263/7249891根据技巧#3,但经过几个小时的摆弄后,我无法将其归结为适合我的查询。
我的问题是,如何调整我原来的查询
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 部分将使列表的该部分显示为“(无)”。