【问题标题】:Mysql Query is selecting only the first row instead of all.Mysql Query 只选择第一行而不是全部。
【发布时间】:2025-12-04 08:35:01
【问题描述】:

您好,我想问一下是否有人可以通过 Barmer 帮助我构建的 Mysql 查询来帮助我解决这个问题。但它发生的查询是只选择一行数据,即表中的第一行。

SELECT c.*, count(s.curso_id) as count, SUM(IF(s.status = "aprobado", 1, 0)) AS count_approved , SUM(IF(s.status = "cupolleno", 1, 0)) AS count_cupolleno
, SUM(IF(s.status = "cancelado", 1, 0)) AS count_cancelado, SUM(IF(s.status = "noacion", 1, 0)) AS count_noacion, SUM(IF(s.status = "ama_de_casa", 1, 0)) AS count_ama_de_casa
, SUM(IF(s.status = "cliente_externo", 1, 0)) AS count_cliente_externo
FROM cursos_modulos AS c
LEFT JOIN subscriptions AS s ON s.curso_id = c.id
LEFT JOIN users AS u ON u.userID = s.user_id

我现在需要的是从 cursos_modluos 中选择所有行,只选择一个。如果有人可以让我知道可能的解决方法,我将不胜感激!

【问题讨论】:

  • 如我所见,您缺少 GROUP BY 语句

标签: php mysql


【解决方案1】:

您正在使用没有group by 的聚合函数。这样的查询总是只返回一行。

不清楚你想做什么,但我可能猜想添加:

GROUP BY c.id

会做你想做的。

【讨论】:

    【解决方案2】:

    应该是

    SELECT c.*, count(s.curso_id) as count, SUM(IF(s.status = "aprobado", 1, 0)) AS count_approved , SUM(IF(s.status = "cupolleno", 1, 0)) AS count_cupolleno
    , SUM(IF(s.status = "cancelado", 1, 0)) AS count_cancelado, SUM(IF(s.status = "noacion", 1, 0)) AS count_noacion, SUM(IF(s.status = "ama_de_casa", 1, 0)) AS count_ama_de_casa
    , SUM(IF(s.status = "cliente_externo", 1, 0)) AS count_cliente_externo
    FROM cursos_modulos AS c
    LEFT JOIN subscriptions AS s ON s.curso_id = c.id
    LEFT JOIN users AS u ON u.userID = s.user_id
    GROUP BY c.id <<----
    

    【讨论】:

      最近更新 更多