Mysql为每个用户选择最早的记录

时间:2012-05-29 23:08:20

标签: php mysql

我正在尝试在PHP中为数据库中每个用户创建最旧条目的列表。

SELECT *, 
MIN(`entries`.`entry_date`) 
AS entry_date 
FROM (`entries`) 
JOIN `user_profiles` 
ON `user_profiles`.`user_id` = `entries`.`user_id` 
WHERE `status` = 1 
GROUP BY `entries`.`user_id`

我正在使用查询从entries表中使用MIN()检索最早的日期条目,并将表user_profiles与其他数据联系起来。查询应为每个用户选择最旧的条目。它似乎工作但它在我回显它们时在某些条目上检索错误的entry_date字段。请帮忙,我无法发现我做错了什么..

2 个答案:

答案 0 :(得分:2)

您需要使用子查询为每个用户获取(user_id, entry_date)对,然后将其与选择感兴趣记录的查询连接:

SELECT *
FROM   entries
  NATURAL JOIN (
    SELECT   user_id, MIN(entry_date) AS entry_date
    FROM     entries
    GROUP BY user_id
  ) AS tmin
  JOIN user_profiles USING (user_id)
WHERE  status = 1

答案 1 :(得分:0)

您是否尝试过使用user_profiles表而不是条目表来解决问题?如果用户没有条目,则它们不会出现在上述查询中。

这可能有所帮助,但我不确定它是否是完整的解决方案:

SELECT *, MIN(entries.entry_date) as entry_date
FROM user_profiles LEFT JOIN entries USING (user_id)
WHERE status = 1
GROUP BY user_profiles.user_id

此外,您将MIN(entires.entry_date)重命名为entry_date ...但您已经有一个名为entry_date的列。尝试将派生列重命名为“min_entry_date”之类的唯一内容?