0

我正在尝试在 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当我回显某些条目时,它会在某些条目上检索错误的字段。请帮忙,我无法发现我做错了什么..

4

2 回答 2

3

您需要使用子查询来获取(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
于 2012-05-29T23:09:43.190 回答
0

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

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

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”之类的独特名称?

于 2012-05-29T23:40:26.060 回答