【问题标题】:Select rows after a row with a certain value在具有特定值的行之后选择行
【发布时间】:2011-07-04 19:26:39
【问题描述】:

嘿,我仍然掌握了一些查询和东西,所以请原谅所有常见的 sql 问题 8)

无论如何,我试图在某个值之后选择行。 不明白?好的,这就是它的实际外观。

表格:消息

+------------+-----------+---------+-------+---------------------------------------+----------------+------------------+
| message_id | thread_id | user_id | to_id | body                                  | message_status | uid_sent_deleted |
+------------+-----------+---------+-------+---------------------------------------+----------------+------------------+
|          1 |         1 |       1 |     7 | How are you bro?                      | read           |                1 |
|          2 |         1 |       7 |     1 | IM good what about you kenny?         | read           |                0 |
|          3 |         1 |       1 |     7 | Same just chilling how is your sister | read           |                1 |
|          4 |         1 |       7 |     1 | Shes coool u know just doin great     | read           |                0 |
|          7 |         1 |       1 |     7 | Thats nice                            | read           |                1 |
|          8 |         1 |       7 |     1 | Yupp                                  | read           |                0 |
|          9 |         1 |       1 |     7 | hhahaha                               | read           |                1 |
|         10 |         1 |       7 |     1 | anyways....                           | unread         |                0 |
+------------+-----------+---------+-------+---------------------------------------+----------------+------------------+

其中消息 id 为 9,在 uid_sent_deleted 列中的值为“1”。 我试图在 uid_sent_deleted 列中最后一行的值为 '1' 之后选择行。

这是我目前正在使用的 sql。感谢您的帮助!

SELECT message_id, thread_id, messages.user_id, to_id, body, message_status, uid_sent_deleted
FROM messages
INNER JOIN messages_thread ON messages_thread.id = messages.thread_id
WHERE thread_id =1
GROUP BY messages.message_id
ORDER BY message_id ASC 

【问题讨论】:

    标签: mysql sql phpmyadmin logic


    【解决方案1】:
    ... WHERE thread_id = 1 AND id > 
         (SELECT MAX(id) FROM messages WHERE uid_sent_deleted = 1)
    

    【讨论】:

    • @Kenny 不应该在某处存在线程关联吗?
    【解决方案2】:
    SELECT message_id, thread_id, messages.user_id, to_id, body, message_status, uid_sent_deleted
    FROM
        (SELECT thread_id t_id, MAX(message_id) m_id
         FROM messages
         WHERE thread_id =1 and uid_sent_deleted = 1
         GROUP BY thread_id) n
    inner join messages on messages.message_id > n.m_id and messages.thread_id = n.t_id
    INNER JOIN messages_thread ON messages_thread.id = messages.thread_id
    ORDER BY message_id ASC
    LIMIT 1
    

    【讨论】:

      【解决方案3】:

      子查询可能会起作用,您选择 MAX(message_id) WHERE uid_sent_deleted=1,然后加入...语法上有点模糊。

      【讨论】: