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,而不是根据 midcreated_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。