首页 > 解决方案 > 返回结果并按变量包含子汇总

问题描述

我想对 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

有没有办法做到这一点?我很感激任何建议或指导 - 谢谢!

标签: phparrayssum

解决方案


加入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(*)除非您需要忽略计数中的空值,否则请使用。


推荐阅读