通过内部联接和最大ID获取最高ID

Kil*_*ise 10 php mysql sql database

我有两个表,对话和消息,我想做的是从对话到消息进行内部联接.

这是我的查询:

    SELECT 
    messages.msg,
    messages.`read`,
    conversations.userid,
    conversations.contactid

    FROM conversations 
        INNER JOIN messages ON 
        conversations.id = messages.convId
    WHERE conversations.id IN(443,444)
Run Code Online (Sandbox Code Playgroud)

现在一切正常,但最后一件事是在我使用的内连接中

conversations.id = messages.convId
Run Code Online (Sandbox Code Playgroud)

我想只获得最高的ID,例如:

 AND MAX(messages.id)
Run Code Online (Sandbox Code Playgroud)

但这不起作用

编辑: 我试过一次使用:

LEFT JOIN messages 
    ON conversations.id = messages.convId 
        AND messages.id = MAX(messages.id) 
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说:组功能的使用无效.

Phi*_*oss 18

编辑

这会奏效!

SELECT conversations.*, m1.* 
FROM conversations 
LEFT JOIN messages m1
    ON conversations.id = m1.cid 
    AND m1.id = (
            SELECT MAX(m2.id) 
            FROM messages m2 
            WHERE m2.cid = conversations.id
        )
Run Code Online (Sandbox Code Playgroud)

  • 我已经更新了我的答案。我已经使用了`MAX()` 函数,并将其从 INNER JOIN 更改为 LEFT JOIN,因此即使没有任何消息,也会返回您的对话。`AND MAX(messages.id)` 本身不起作用,但是如果将它与 `messages.id` 字段进行比较,它应该可以工作:`AND messages.id = MAX(messages.id)` (2认同)