我正在编写一个简单的pm系统,除1个查询外,它的工作正常。
我想获得一个对话列表,并在每个对话中显示最新帖子的预览。现在,只要消息ID在1-99之间的任何地方,下面的查询就可以正常工作,但是一旦达到100,它就不会返回结果中带有大于99的ID的消息。
有没有人知道为什么当数据库行的id高于2位数时它停止工作,甚至解决方案都会很好。
这是我目前的查询:
SELECT userid, partnerid, max(latestmsg) as postdate, type, message, m.firstname, m.lastname FROM (
SELECT sentfrom as userid, sentto as partnerid, max(postdate) as latestmsg, type, message FROM chatmessages GROUP BY sentfrom, sentto
UNION
SELECT sentto as userid, sentfrom as partnerid,max(postdate) as latestmsg, type, message FROM chatmessages GROUP BY sentto, sentfrom
) chatmsg
LEFT JOIN members m on chatmsg.partnerid = m.memberid
WHERE userid = '1'
AND partnerid != '1'
AND type = '1'
GROUP BY userid, partnerid
ORDER BY latestmsg DESC
我会非常感谢任何建议。
答案 0 :(得分:1)
这有效吗?
SELECT
l.userid
, l.partnerid
, l.postdate
, c.type
, c.message
, m.firstname
, m.lastname
FROM (
SELECT
userid
, partnerid
, MAX(postdate) AS postdate
FROM (
SELECT
case when sentfrom = '1' then sentfrom else sentto end AS userid
, case when sentfrom = '1' then sentto else sentfrom end AS partnerid
, postdate
FROM chatmessages
WHERE (
(sentfrom = '1' AND sentto <> '1')
OR
(sentto = '1' AND sentfrom <> '1')
)
AND type = '1'
) AS raw
GROUP BY
userid
, partnerid
) as l
INNER JOIN chatmessages c on (
( l.userid = c.sentfrom and l.partnerid = c.sentto )
or
( l.userid = c.sentto and l.partnerid = c.sentfrom )
)
and c.type = '1' and c.postdate = l.postdate
INNER JOIN members m ON l.partnerid = m.memberid
;