SQL - 检索 CASE WHEN 语句的最新消息
SQL - Retrieving latest message for a CASE WHEN statement
我在尝试让我的 CASE WHEN
语句之一查询每一行中名为 is_op
的内容时遇到问题,因为它为所有行返回相同的数字。这是代码:
SELECT `mid`, `message`, `created_at`,
CASE WHEN (SELECT `uid` FROM `bulletin_message` WHERE `bid` = 1 ORDER BY `mid` ASC LIMIT 1) = 5 THEN 1 ELSE 0 END AS `is_op`,
CASE WHEN `bulletin_message`.`uid` = 5 THEN 1 ELSE 0 END AS `is_me`
FROM`bulletin_message`
WHERE `bid` = 1
GROUP BY `mid`
ORDER BY `mid` ASC
如您所见,我正在尝试 select 条件为 bid
必须等于 1 且 uid
必须等于 5 的消息。而 is_me
returns 每行的正确值,is_op
根本没有反映所有行的正确值。它在语句的结果中显示 1
,而不是根据 mid
或 created_at
的最旧值显示用户是否为 OP。我认为我没有像 is_me
语句那样正确查询每一行。
这是table的所有数据:
mid = message uid; bid = bulletin/thread uid; uid = user uid
| mid | bid | uid | message | created_at |
---------------------------------------------------
| 3 | 1 | 5 | ... | ... |
| 5 | 1 | 6 | ... | ... |
| 6 | 2 | 7 | ... | ... |
| 9 | 1 | 5 | ... | ... |
| 10 | 1 | 7 | ... | ... |
| 11 | 1 | 6 | ... | ... |
如何改进这行代码,使其可以查询每一行?谢谢!
编辑:OP 是原发帖人,抱歉没有说明!通常是 post 每个 bid
第一个的人。
问题是您的子查询基于固定谓词``bid= 1
,因此它绑定到return相同的值所有行[=20] =].
这样的事情会更有意义:
SELECT `mid`, `message`, `created_at`,
CASE WHEN (SELECT `uid`
FROM `bulletin_message` AS t2
WHERE t1.`bid` = t2.`bid`
ORDER BY `mid` ASC LIMIT 1) = t1.`uid`
THEN 1
ELSE 0
END AS `is_op`
FROM`bulletin_message` AS t1
ORDER BY `mid` ASC
子查询使用 bid
字段关联:它 return 是当前线程的 OP。
我在尝试让我的 CASE WHEN
语句之一查询每一行中名为 is_op
的内容时遇到问题,因为它为所有行返回相同的数字。这是代码:
SELECT `mid`, `message`, `created_at`,
CASE WHEN (SELECT `uid` FROM `bulletin_message` WHERE `bid` = 1 ORDER BY `mid` ASC LIMIT 1) = 5 THEN 1 ELSE 0 END AS `is_op`,
CASE WHEN `bulletin_message`.`uid` = 5 THEN 1 ELSE 0 END AS `is_me`
FROM`bulletin_message`
WHERE `bid` = 1
GROUP BY `mid`
ORDER BY `mid` ASC
如您所见,我正在尝试 select 条件为 bid
必须等于 1 且 uid
必须等于 5 的消息。而 is_me
returns 每行的正确值,is_op
根本没有反映所有行的正确值。它在语句的结果中显示 1
,而不是根据 mid
或 created_at
的最旧值显示用户是否为 OP。我认为我没有像 is_me
语句那样正确查询每一行。
这是table的所有数据:
mid = message uid; bid = bulletin/thread uid; uid = user uid
| mid | bid | uid | message | created_at |
---------------------------------------------------
| 3 | 1 | 5 | ... | ... |
| 5 | 1 | 6 | ... | ... |
| 6 | 2 | 7 | ... | ... |
| 9 | 1 | 5 | ... | ... |
| 10 | 1 | 7 | ... | ... |
| 11 | 1 | 6 | ... | ... |
如何改进这行代码,使其可以查询每一行?谢谢!
编辑:OP 是原发帖人,抱歉没有说明!通常是 post 每个 bid
第一个的人。
问题是您的子查询基于固定谓词``bid= 1
,因此它绑定到return相同的值所有行[=20] =].
这样的事情会更有意义:
SELECT `mid`, `message`, `created_at`,
CASE WHEN (SELECT `uid`
FROM `bulletin_message` AS t2
WHERE t1.`bid` = t2.`bid`
ORDER BY `mid` ASC LIMIT 1) = t1.`uid`
THEN 1
ELSE 0
END AS `is_op`
FROM`bulletin_message` AS t1
ORDER BY `mid` ASC
子查询使用 bid
字段关联:它 return 是当前线程的 OP。