这是一个非常奇怪的问题,我一直试图解决这个问题很长一段时间。我已经搜索了这个问题的答案,我只是无法找到答案。我很困难,如果有人能在这里帮助我,我会非常感激。
首先,我为此创建了一个SQL小提琴。我很难解释这一点,我觉得这是让人们了解我的架构和数据的最佳方式:http://www.sqlfiddle.com/#!9/f5da89/3
所以,这就是我想要做的事情:
wp_bbpas
中选择不超过24小时的行wp_users
表,这样我就可以获得用户名等实际发生了什么,它是否为每一行选择了最大date_recorded
(这就是我想要的,因为每个查询可以返回数百个),然后返回什么似乎是正确的数据 - 但是,仔细检查(使用索引键),你会发现它完全混合了内容。 (id
334与其返回的date_recorded
不同
我在这里滥用GROUP BY
功能了吗?谁能指出我在这里做错了什么?
由于
答案 0 :(得分:2)
你应该使用像这样的子选择
SELECT p.date_recorded as date_recorded, p.id, p.userid, p.status, w.user_nicename, w.user_login, w.display_name
FROM wp_bbpas AS p
JOIN wp_users AS w ON w.id = p.userid
WHERE date_recorded >= NOW() - INTERVAL 24 HOUR
and (p.userid, p.date_recorded) in ( select userid, MAX(date_recorded)
from wp_bbpas group by userid)
ORDER BY date_recorded DESC
答案 1 :(得分:1)
这个回复你期待的东西,不是吗?
SELECT p.date_recorded, p.id, p.userid, p.status, w.user_nicename, w.user_login, w.display_name
FROM wp_bbpas AS p
JOIN wp_users AS w ON w.id = p.userid
WHERE date_recorded >= NOW() - INTERVAL 24 HOUR
GROUP BY p.userId
ORDER BY date_recorded DESC
(根据此提交的数据,您不需要max(date_recorded)
)