【问题标题】:join two tables but get the last record in each group in the second table mysql连接两个表,但在第二个表mysql中获取每个组中的最后一条记录
【发布时间】: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。你能把预期的结果吗?

标签: mysql join group-by


【解决方案1】:

您的问题仍未 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2014-03-03
    • 2014-08-29
    • 2019-10-08
    • 2013-07-23
    • 1970-01-01
    • 2016-07-21
    相关资源
    最近更新 更多