我是新手,请原谅基本问题。我只是很难概念化它是如何工作的。
假设我的数据库中有三个包含这些相关列的表:
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
这种作品有两个问题:
categories
每个post_id
中有多个条目),我会收到重复的内容。我想摆脱重复,但承认帖子是否属于多个类别。cat_name
。这看起来有点浪费。有没有办法在一个查询中执行此操作?再次,抱歉这个的基本性质。我已经读了很长时间的教程,但我似乎无法解决这个问题。任何方向都表示赞赏。
答案 0 :(得分:0)
每个帖子一排,是吗?我们如何为您提供逗号分隔的类别名称?
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
。
答案 1 :(得分:0)
使用以下格式:
SELECT t1.name
,t1.age
,GROUP_CONCAT(t2.job_name SEPARATOR',')typeofjob
FROM t_one AS t1
JOIN t_three AS t3 ON t3.user_id = t1.user_id
JOIN t_two AS t2 ON t2.job_id = t3.job_id
GROUP BY t1.user_id;
输出: