我有两个要使用的表.
>类别
>主题
主题行知道它属于哪个类别,因为topic.topic_cat应该与category.cat_id相匹配.
while($row = $result->fetch_assoc()) {
echo $row['cat_name'] . ' Latest Post is ' . $row['topic_name'];
}
这将是执行后的样子的一个示例.
category1 Latest Post is "latest post"
category2 Latest Post is "latest post"
category3 Latest Post is "latest post"
等等…
我可以使用哪个SQL查询来选择它?
这是我的表结构.
> cat_id
> cat_name
> cat_description
> topic_id
> topic_name
> topic_date
> topic_cat
> topic_by
解决方法:
更新资料
这是一个更有效的查询,可为您提供相同的结果.它将执行得更好,因为子查询与外部查询不相关(不使用任何数据)
SELECT cat_name, topic_name, latest as topic_date
FROM categories c
LEFT JOIN (
SELECT topic_name, topic_cat, MAX(topic_date) latest
FROM topics
GROUP BY topic_cat
) as t
ON c.cat_id = t.topic_cat
您询问了LEFT JOIN与JOIN:第一种方法意味着,如果任何类别都没有主题,那么您仍然希望它包含在结果中.主题名称和日期将为空. JOIN表示您希望结果仅包含具有匹配主题的类别.因此,您可以根据自己的喜好更改我的任何一个查询.
原始答案
这是您需要的:
SELECT c.cat_name, t.topic_name, t.topic_date
FROM categories c
LEFT JOIN topics t ON c.cat_id=t.topic_cat
WHERE topic_date = (
SELECT MAX(t2.topic_date)
FROM topics t2
WHERE t2.topic_cat = t.topic_cat
)
cat_name | topic_name | topic_date
执行查询后,您可以根据需要运行循环:
while($row = $result->fetch_assoc()) {
echo $row['cat_name'] . ' Latest Post is ' . $row['topic_name'];
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。