我正在尝试在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
字段。请帮忙,我无法发现我做错了什么..
答案 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”之类的唯一内容?