1

我有以下 MySQL 语句

SELECT * FROM user_messages AS T WHERE user_id = '33' AND id = (SELECT Max(id) from user_messages AS TT WHERE T.from_userid = TT.from_userid) ORDER BY status, id DESC

我似乎遇到的问题是当我只有一张唱片时。我认为 MySQL 会返回与 user_link = '33' 关联的单个记录,但它什么也不返回。

我需要使用“Max”功能,因为我使用它来提取最新条目。我试图避免有多个查询或不得不使用 php 进行排序。非常感谢任何帮助!

4

2 回答 2

0

感谢您的回答戈登,我检查了数据库,记录存在。我做了更多的研究,结果是我需要加入数据。我能够返回 Min 或 Max 记录,但没有返回相应/相关的字段。

SELECT * FROM user_messages INNER JOIN(SELECT from_username, MAX(id) AS id FROM user_messages WHERE user_link = '33' GROUP BY from_username ORDER BY status, id DESC) t2 ON user_messages.id = t2.id AND user_messages.from_username = t2.from_username

回答这个问题的线程是这个 - Need To Pull Most Recent Record By Timestamp Per Unique ID

于 2013-05-22T23:38:16.893 回答
0

这是您的查询:

SELECT *
FROM user_messages AS T
WHERE user_id = '33' AND
      id = (SELECT Max(id)
            from user_messages AS TT
            WHERE T.from_userid = TT.from_userid
           )
ORDER BY status, id DESC

以下是它可能无法返回任何行的三个原因。首先,user_id = '33'表中可能不存在。第二个from_userid可能是NULL。第三,id对于所有匹配的记录,该值可能为 NULL。

也许这个更简单的版本会有所帮助:

select *
from user_messages um
where user_id = '33'
order by id desc
limit 1
于 2013-05-22T23:23:31.323 回答