PHP SQL 有一个问题


PHP SQL Has an issue

这是我的表,我应该获取每个status_id.MAX (id)

id      status_id
10          1
11          1
12          2
13          2
14          2
15          4
16          4
所以,我

使用这个sql查询,它工作真,并获取我所有最大ID。

select status_id, max(id) as max FROM `table` 
where status_id in (1,2,3,4) group by status_id

这个 sql 命令使用 while 为我获取 3 个 MAX ID。

11, 14, 16....

你看,没有任何合适的 id 到 3rd status_id. 如果第 3 个 status_id 没有任何合适的 id,只需将其标记为零。所以我希望sql会带来这些结果:

11, 14, 0, 16

您可以创建一个子查询,该子查询基本上具有您需要的所有ID,并对其进行左连接。

SELECT  a.status_ID,
        IFNULL(MAX(b.id), 0) maxVal
FROM    
        (
            SELECT 1 status_ID UNION ALL 
            SELECT 2 UNION ALL
            SELECT 3 UNION ALL
            SELECT 4 
        ) a
        LEFT JOIN `table` b ON a.status_id = b.status_id
GROUP   BY a.status_id
  • SQLFiddle 演示

您可以使用包含所有 id 和 stats_id值 0 的临时虚拟表连接:

SELECT dummy.status_id, COALESCE(MAX(id), 0) AS max
FROM (
        SELECT 1 status_id
  UNION SELECT 2 status_id
  UNION SELECT 3 status_id
  UNION SELECT 4 status_id
) dummy
LEFT JOIN `table` 
ON dummy.status_id = table.status_id
GROUP BY dummy.status_id

但这不会扩展,并且是维护的噩梦(您必须更改虚拟选择,以防出现新的status_id)。如果您有一个包含所有status_ids的表,请将虚拟选择替换为该表。