gpt4 book ai didi

php - MySQL:连接三个表

转载 作者:行者123 更新时间:2023-11-30 00:44:34 26 4
gpt4 key购买 nike

我是新手,所以请原谅这个基本问题。我只是很难想象这是如何运作的。

假设我的数据库中有三个表,其中包含这些相关列:

POSTS - post_id, post_title, post_date
CATEGORIES - post_id, cat_id
CATEGORY NAMES - cat_id, cat_name

现在,我尝试显示按 post_date 排序的所有帖子的列表。在此列表中,我想列出类别。

我已经做到了这一点:

SELECT * 
FROM posts
LEFT JOIN categories ON posts.post_id = categories.post_id
ORDER BY post_date ASC

这种方法可行,但有两个问题:

  1. 由于帖子可以有多个类别(即每个 post_idcategories 中有多个条目),因此我收到了重复的帖子。我想删除重复项,但要确认帖子是否属于多个类别。
  2. 除了执行另一个查询之外,我不知道如何进一步获取 cat_name。但这似乎有点浪费。有没有办法在一个查询中完成它?

再次对此事的基本性质表示歉意。我已经阅读教程很长时间了,但我似乎无法理解这一点。任何方向都值得赞赏。

最佳答案

每个帖子一行,是吗?我们为您提供以逗号分隔的类别名称怎么样?

     SELECT p.post_title, p.post_date, 
GROUP_CONCAT(c.cat_name SEPARATOR ', ') AS categories
FROM posts AS p
LEFT JOIN categories AS pc ON p.post_id = pc.post_id
LEFT JOIN category_names AS c ON pc.cat_id = c.cat_id
GROUP BY p.post_title, p.post_date
ORDER BY p.post_date ASC, p.post_title

两个连续的连接获取类别名称,并且 GROUP_CONCAT 将多个类别名称聚合到一个以逗号分隔的列表中。为了使 GROUP_CONCAT 正常工作,我们还需要 GROUP BY

关于php - MySQL:连接三个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21492743/

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