【发布时间】:2016-10-31 13:26:29
【问题描述】:
我有两个表:用户和访问。在访问中,每个用户都有多次访问。我想做的是加入这两个表来获取用户数据,如 id、user_name、User_email 和上次访问记录,如 url、unix_time。我使用了这段代码,但现在完成只获取过去两周内没有访问过的用户需要很长时间
表用户:
user_id user_name user_email
1 foo foo@mail.com
2 bar bar@mail.com
餐桌访问
id user_id unix_time page
1 1 (unixtime value) visited page url
2 2 (unixtime value) visited page url
3 1 (unixtime value) visited page url
4 2 (unixtime value) visited page url
预期结果是:(从访问表中访问的每个用户最后一次访问)
id user_id user_name user_email unix_time page
3 1 foo foo@mail.com (unixtime value) visited page url
4 2 bar bar@mail.com (unixtime value) visited page url
查询:
$two_weeks_before = date('Y-m-d',strtotime("-2 weeks"));
$month_before = date('Y-m-d',strtotime("-1 month"));
SELECT m1.* FROM visits_log m1
LEFT JOIN visits_log m2 ON (m1.user_id = m2.user_id AND m1.id < m2.id)
WHERE m2.id IS NULL and m1.admin != '1' and
from_unixtime(m1.unix_time) < '$two_weeks_before' and
from_unixtime(m1.unix_time) > '$month_before'
所以我正在寻找一个得到相同结果但执行速度更快的查询。
【问题讨论】:
-
不清楚您要什么。在标题中您希望获得最新访问,但在您的帖子中您要求没有访问的用户请澄清。尝试提供数据样本和预期结果。 sqlfiddle 会很有帮助
-
同样的评论,我不明白你想要什么。在查询中,您使用 LEFT JOIN,在您的解释中,您告诉我们这是一个 INNER JOIN。你能把预期的结果吗?