gpt4 book ai didi

mysql - 无论如何,返回 IN 值的默认结果

转载 作者:行者123 更新时间:2023-11-29 16:48:15 24 4
gpt4 key购买 nike

我有一个查询,可以获取在特定日期范围内在线的所有用户。由于我想要如何显示数据,这是通过 IN 查询完成的。但是,如果没有找到解析为 IN 条件的 ID 的记录,我想返回默认值。

简化查询:

SELECT users.Name, users.ID, SUM(users.Minutes) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)

现在,上面的查询将只提取满足条件的行,如预期的那样。我还希望查询为 IN 条件中不满足条件的 ID 提取默认值。

在这种情况下使用 IFNULL 将不起作用,因为记录永远不会返回

SELECT users.Name, users.ID, IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM UserTable
LEFT JOIN OnlineUseage ON OnlineUseage.ID = UserTable.ID
WHERE OnlineUseage.Date >= '2016-01-01 00:00:00' AND OnlineUseage.Date <= '2016-12-31 23:59:59'
AND UserTable.ID IN(332,554,5764,11,556,.........)
GROUP BY users.ID
ORDER BY FIELD(UserTable.ID, 332,554,5764,11,556,.........)

仅供引用 - 我正在将此查询解析为自定义 PDO 函数。我没有使用已弃用的 mysql 函数

最佳答案

您对 OnlineUseage 有一个条件,即左联接变得像内联接。

将条件移至 from 子句会更好:

SELECT
users.Name,
users.ID,
IFNULL(SUM(users.Minutes), 0) AS MinutesOnline
FROM
users
LEFT JOIN OnlineUseage ON
OnlineUseage.ID = users.ID and
OnlineUseage.Date >= '2016-01-01 00:00:00' AND
OnlineUseage.Date <= '2016-12-31 23:59:59'
WHERE
users.ID IN (332,554,5764,11,556,.........)
GROUP BY
users.ID,users.Name
ORDER BY
users.ID

关于mysql - 无论如何,返回 IN 值的默认结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978644/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com