我有两张桌子:用户和访问。在访问中,每个用户都有多次访问。我想做什么来加入这两个表来获取用户数据,如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'
所以我正在寻找一个获得相同结果但执行速度更快的查询。
答案 0 :(得分:0)
您的问题仍然不是100%明确,而且您的数据样本不完整。
但是我的尝试可以从这里开始:
http://sqlfiddle.com/#!9/7a9b7/1
SELECT u.*, v.* FROM users u
LEFT JOIN visits v
ON u.user_id = v.user_id
AND v.unix_time > now()- INTERVAL 2 WEEK