gpt4 book ai didi

mysql - 提供额外的 bool 类型返回列,用于评估另一个查询

转载 作者:行者123 更新时间:2023-11-29 13:58:17 26 4
gpt4 key购买 nike

我正在尝试开发一个查询,

  1. 给出每个线程中不是由 currentUserID 写入的最后一条消息(现在通过 group by thread_id, order by message_id desc AND WHERE results.sender_id != currentUserID 完成)
  2. 如果用户启动了一个线程但没有收到响应,则该线程不应显示(现在只需使用 WHERE results.sender_id != currentUserID 过滤数据即可完成)
  3. 提供一个 bool 列来判断是否在此线程中发送了响应(未完成,但需要从查询中查找最后一个元素并查看 sender_id 是否 = 当前登录的用户 ID)

http://sqlfiddle.com/#!2/85971/2

剧情简介

  • 用户 1 向用户 2 发送消息
  • 话题 ID:1
  • 主题:“您好,主题”
  • body :“嗨 body ”

  • 用户 2 回复:

  • 话题 ID:1
  • body :“嗨 body react ”

作为用户 1,SQL 应返回

THREAD_ID |SUBJECT     | SENDER_ID | BODY             | Responded
1 | Hi Subject | 2 | Hi Body Response | false

作为用户 2,SQL 应返回

THREAD_ID |SUBJECT     | SENDER_ID | BODY    | Responded
1 | Hi Subject | 1 | Hi Body | true

请参阅 fiddle

我的尝试是下面的,它需要 1 英亩和 2 英亩,但不是 3 英亩,我试图用 UNIONS 来实现这一目标,但一无所获。

SELECT * FROM (
SELECT t.id as thread_id, t.subject, m.sender_id, m.body
FROM messages m
JOIN threads t ON (m.thread_id = t.id)
ORDER BY t.id asc, m.cdate desc
) as results
WHERE results.sender_id != currentUserID
GROUP BY results.thread_id;

最佳答案

检查下面的查询。我还添加了消息 ID 列。

第一个结果...

SELECT t.id as thread_id, t.subject, m.sender_id, m.body, m.id,
(SELECT CASE s.status WHEN 1 THEN 'true' ELSE 'false' END
FROM STATUS s where s.message_id = m.id and s.user_id = 1) Responded
FROM messages m
JOIN threads t ON (m.thread_id = t.id)
WHERE m.sender_id != 1

第二个...

SELECT t.id as thread_id, t.subject, m.sender_id, m.body, m.id,
(SELECT CASE s.status WHEN 1 THEN 'true' ELSE 'false' END
FROM STATUS s where s.message_id = m.id and s.user_id = 2) Responded
FROM messages m
JOIN threads t ON (m.thread_id = t.id)
WHERE m.sender_id != 2

谢谢!

@leo。

关于mysql - 提供额外的 bool 类型返回列,用于评估另一个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15468383/

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