我试图在PHP中为数据库中的每个用户创建最旧的项目列表。Mysql为每个用户选择最旧的记录
我使用的查询从entries
表中检索使用MIN()
与表user_profiles
其他数据联结最古老的过时条目。查询应为每个用户选择最旧的条目。它似乎工作,但它在一些条目上检索错误的entry_date
字段,当我回应他们。请帮帮忙,我看不出我做错了什么..
我试图在PHP中为数据库中的每个用户创建最旧的项目列表。Mysql为每个用户选择最旧的记录
我使用的查询从entries
表中检索使用MIN()
与表user_profiles
其他数据联结最古老的过时条目。查询应为每个用户选择最旧的条目。它似乎工作,但它在一些条目上检索错误的entry_date
字段,当我回应他们。请帮帮忙,我看不出我做错了什么..
您需要使用子查询来获得(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
您是否尝试过从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”之类的独特内容?
谢谢!我试过你的查询,但得到相同的结果..也许它的PHP问题 – CyberJunkie
谢谢!我尝试了查询并得到了'重复列名'entry_date'',然后我更改了'as another_name',但得到的结果与最旧的不正确的条目相同 – CyberJunkie
@CyberJunkie:'user_profiles'表还包含名为'entry_date'的列吗?我还注意到我原来的答案(现在已更正)中的一个错字:我引用了一个名为'events'而不是'entries'的表 - 如果你已经捕获了这个表? – eggyal
不,但它包含我需要的其他列。查询成功地为每个用户使用'MIN()'检索最老的'entry_date',但其他行不符合它当我回声在php – CyberJunkie