gpt4 book ai didi

mysql - 给定两个表,从一个表中选择所有数据,从另一个表中只选择最新的数据

转载 作者:行者123 更新时间:2023-11-29 03:22:56 25 4
gpt4 key购买 nike

我正在尝试构建一个使用 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 |
+----------+-----------------------+------------------------+-----------+----------+

我在 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 是引用用户表的外键。

如果类别中没有主题(我上面示例中的园艺类别),我们将假定程序的 PHP 部分将使列表的该部分显示为“(无)”。

最佳答案

首先找到每个类别中的最新帖子:

select topic_cat, max(topic_id) as latest_topic
from topics group by topic_cat

然后将其添加到您的加入条件中:

SELECT  c.cat_name AS Category, t.topic_name AS Recent_Topic 
FROM categories c
left JOIN topics t on c.cat_id = t.topic_cat
left join (select topic_cat, max(topic_id) as latest_topic
from topics group by topic_cat) as latest_topics
on latest_topics.topic_cat = c.cat_id
and latest_topics.latest_topic = t.topic_id
where latest_topics.topic_cat is not null or t.topic_cat is null;

关于mysql - 给定两个表,从一个表中选择所有数据,从另一个表中只选择最新的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40979927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com