2012-05-29 68 views
0

我试图在PHP中为数据库中的每个用户创建最旧的项目列表。Mysql为每个用户选择最旧的记录

​​

我使用的查询从entries表中检索使用MIN()与表user_profiles其他数据联结最古老的过时条目。查询应为每个用户选择最旧的条目。它似乎工作,但它在一些条目上检索错误的entry_date字段,当我回应他们。请帮帮忙,我看不出我做错了什么..

回答

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 
+0

谢谢!我尝试了查询并得到了'重复列名'entry_date'',然后我更改了'as another_name',但得到的结果与最旧的不正确的条目相同 – CyberJunkie

+0

@Cyber​​Junkie:'user_profiles'表还包含名为'entry_date'的列吗?我还注意到我原来的答案(现在已更正)中的一个错字:我引用了一个名为'events'而不是'entries'的表 - 如果你已经捕获了这个表? – eggyal

+0

不,但它包含我需要的其他列。查询成功地为每个用户使用'MIN()'检索最老的'entry_date',但其他行不符合它当我回声在php – CyberJunkie

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”之类的独特内容?

+0

谢谢!我试过你的查询,但得到相同的结果..也许它的PHP问题 – CyberJunkie

相关问题