Mysql
在單個請求中為另一個查詢重用 sql 查詢值
我有一個用於與表聊天的 sql 表
messages
,其中包含id int pk
,chat_id int
,created_at timestamp
.給定一條消息
id
,是否可以在單個查詢中在同一聊天中選擇它以及它之後的 5 條消息?或者我可以以某種方式組合以下兩個子查詢(
starting_message_id
作為輸入)?SELECT * FROM messages WHERE chat_id IN ( SELECT chat_id from messages where id='starting_message_id' ) AND created_at > ( SELECT created_at from messages where id='starting_message_id' ) ORDER BY created_at ASC LIMIT 5;
我覺得只有兩個請求就足夠了:
- 按聊天 ID 選擇 chat_id 和 created_at 列
- 選擇一些已知所有數據的消息
正確的優化語法是什麼?
我相信你想要這樣的東西:
SELECT msg.* FROM messages msg JOIN (SELECT chat_id, created_at FROM messages where id='starting_message_id') nested ON (msg.chat_id=nested.chat_id and msg.created_at>=nested.created_at) ORDER BY msg.created_at LIMIT 6;