【发布时间】:2014-04-06 17:36:36
【问题描述】:
我有 2 个表:members 和 member_logs。
成员可以属于成员表中的组。给定一个日期范围和一个组,我试图弄清楚如何获得成功登录次数最多的 10 天。到目前为止,我所拥有的是一个巨大的子查询恐惧巢穴。
SELECT count(member_id) AS `num_users`,
DATE_FORMAT(`login_date`,'%Y-%m-%d') AS `reg_date`
FROM member_logs
WHERE `login_success` = 1
and `reg_date` IN
(SELECT DISTINCT DATE_FORMAT(`login_date`,'%Y-%m-%d') AS `reg_date`
FROM member_logs
WHERE `login_success` = 1
and (DATE_FORMAT(`login_date`,'%Y-%m-%d') BETWEEN '2012-02-25' and '2014-03-04'))
and `member_id` IN
(SELECT `member_id`
FROM members
WHERE `group_id` = 'XXXXXXX'
and `deleted` = 0)
ORDER BY `num_users` desc
LIMIT 0, 10
据我了解,发生的情况是 WHERE 子句在子查询生成之前进行评估,我也应该使用连接。如果有人可以帮助我或为我指明正确的方向,那将是不可思议的。
编辑:限制错误,已修复
【问题讨论】:
-
您的实际问题是什么?
-
@Strawberry 我在当前结构中犯了哪些错误,如何通过连接来解决?
-
第一部分太无聊了。对于第二部分,考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集