php - 返回结果并按变量包含子汇总
问题描述
我想对 id_module 变量返回的 DISTINCT 数据进行细分,并同时显示 id_content 和标题。
我尝试过使用 array_sum、array_count 和 for_each...我正在努力理解如何正确设置它。我已经完成了其中的一部分工作,并且正在寻找如何让其余数据显示的方向。
这是我在执行以下查询时能够检索的 JSON 数组的示例:
select DISTINCT id_module, id_cr, title from content WHERE (id_module = '003' OR id_module = '005')
UNION ALL
SELECT DISTINCT id_module, id_cr, title FROM content_users WHERE (id_module = '003' OR id_module = '005') and id_user='999'
Array
(
[content] => Array
(
[0] => Array
(
[id_content] => 49620
[title] => Asthma: The Basics—Part 1
[id_module] => 001
)
[1] => Array
(
[id_content] => 49633
[title] => Asthma: The Basics—Part 2
[id_module] => 001
)
[2] => Array
(
[id_content] => 48469
[title] => Autism Spectrum Disorder
[id_module] => 002
)
)
)
这是我用来返回汇总结果的查询(id_module 可能有重复,所以我只想要 DISTINCT 模块,所以计数是正确的)。此查询工作正常并返回我所期望的:
select id_module, count(id_module) as total_module from
(
select DISTINCT id_module, id_cr, title from content WHERE (id_module = '003' OR id_module = '005')
UNION ALL
SELECT DISTINCT id_module, id_cr, title FROM content_users WHERE (id_module = '003' OR id_module = '005') and id_user='999'
)
as T GROUP BY id_module ORDER BY id_module
返回的结果是:
id_module total_module
001 2
002 1
我还需要将两个查询的结果结合起来...... id_content 和标题与摘要一起返回......类似这样,但我没有成功编写一个将在此返回的查询格式:
id_module total_module id_content title
001 2 49620 Asthma: The Basics—Part 1
001 2 49633 Asthma: The Basics—Part 2
002 1 48469 Autism Spectrum Disorder
有没有办法做到这一点?我很感激任何建议或指导 - 谢谢!
解决方案
加入id_module
列上的两个查询。
SELECT t1.id_module, t2.total_module, t1.id_cr, t1.title
FROM (
select DISTINCT id_module, id_cr, title from content WHERE id_module IN ('003', '005')
UNION ALL
SELECT DISTINCT id_module, id_cr, title FROM content_users WHERE id_module IN ('003', '005') and id_user='999'
) AS t1
JOIN (
SELECT id_module, COUNT(*) AS total_module
FROM (
select DISTINCT id_module, id_cr, title from content WHERE id_module IN ('003', '005')
UNION ALL
SELECT DISTINCT id_module, id_cr, title FROM content_users WHERE id_module IN ('003', '005') and id_user='999'
) AS T
GROUP BY id_module
) AS t2 ON t1.id_module = t2.id_module
ORDER BY t1.id_module
它通常也比使用id_module IN (x, y, z, ...)
更好id_module = x OR id_module = y OR id_module = z ...
。COUNT(*)
除非您需要忽略计数中的空值,否则请使用。
推荐阅读
- google-chrome-extension - 如何在 Outlook 的 Chrome 扩展中获取电子邮件元数据(ConversationId、类别)
- java - 访问 Spring bean 类时并发修改异常
- python-3.x - 标记来自两个不同数据框列的数据点
- git - Maven 和 Docker 在 Kubernetes/OpenShift 上构建、发布和部署
- typescript - 如何从多个请求中累积数据
- c# - 字典
到字典 - database - Laravel 会话中的数据库连接
- angular - 如何在角度 7 中的 Select 中填充远程 JSON 值?
- php - 网站数据库不会自动更新
- javascript - Web 组件的事件“已加载所有内容并绘制到屏幕上”