mysql - SQL phpmyadmin SELECT 并在父 SELECT 的列中将多个字段作为字符串 concat 返回
问题描述
我有 3 张桌子。用户、内容和类别。因此,用户编写内容并为此选择类别。
categories users
-------------------------- ----------------------
category_id category_name user_id user_name ...
contents
------------------------------------------------
content_id content_creator content_category ...
所以目录中有两个引用。
- content_creator => user_id
- content_category => category_id
我需要什么:我想要一个所有类别的列表,并且对于每一行,我想显示包含该类别的内容的数量以及在其内容中使用该类别的用户。
我做了什么:
我试过这个查询,它工作正常
SELECT ca.category_id,ca.category_name,
COUNT(c.content_id) AS contents_count,
COUNT(c.content_creator) AS contents_creators_count
FROM categories ca
JOIN contents c ON (ca.category_id = c.content_category)
GROUP BY content_category
结果如我所愿
category_id category_name contents_count contents_creators_count
6 cat1 6 3
8 cat2 1 1
9 cat3 1 1
10 cat4 2 2
11 cat5 2 2
问题:我可以将所有users.user_id以字符串或数组的形式作为结果列吗?
就像我试过这个但它只适用于一排
SELECT ca.category_id,ca.category_name,
COUNT(c.content_id) AS contents_count,
(
SELECT u.user_id,u.User_name
FROM users u
JOIN contents c ON (u.user_id = c.content_id)
JOIN categories ca ON (c.content_category=ca.category_id)
)AS category_users
FROM categories ca
JOIN contents c ON (ca.category_id = c.content_category)
GROUP BY ca.category_id
我想要这样的结果:
category_id category_name contents_count category_users //based on user_id
6 cat1 6 63,88,125
8 cat2 1 63
9 cat3 1 88
10 cat4 2 88,70
11 cat5 2 null //like this category not used
解决方案
你似乎想要字符串聚合:MySQL 提供GROUP_CONCAT()
了这个。如果你想要每个内容的(不同的)内容创建者列表,你不需要带 users 表;该信息已经可用contents
。
所以:
select ca.category_id, ca.category_name,
count(*) as contents_count,
group_concat(DISTINCT content_creator ORDER BY content_creator) category_users
from categories ca
inner join contents c on ca.category_id = c.content_category
group by ca.category_id
推荐阅读
- kql - Kusto 查询如何将表中的每一行作为参数进行迭代以在另一个表中查询?
- java - 如何修复 Java Swing JFrame 的大小错误
- c++ - 嵌套类的模板模板参数的可变类型模板参数和非类型模板参数如何相互约束?
- php - 如何在 PHP 中加二?
- prolog - Prolog递归迭代列表失败
- python - 在 Ruby / Python 中实现 Umbraco/ASP.NET 密码验证脚本
- r - R - 在新数据框中:如果单元格与同一行的另一列匹配,则
- python - python 新手,在 while 和 ifs 上有问题
- android - 将整个布局转换为图像/位图
- regex - 我需要对此 RegEx 进行哪些修改以仅在字符串中有数字后才允许小写字母?