Php 检索查询中最近的日期
我能够修复以前的查询,但是检索的结果包含重复项。我想检索最新的记录 例如:Php 检索查询中最近的日期,php,mysql,database,Php,Mysql,Database,我能够修复以前的查询,但是检索的结果包含重复项。我想检索最新的记录 例如: id | firstname | lastname | email | date 1 | steven | smith | steven@gmail.com 2013-06-10 04:01:25 2 | Bill | Johnson | bill@gmail.com | 2014-06-10 04:01:25 3 | ste
id | firstname | lastname | email | date
1 | steven | smith | steven@gmail.com 2013-06-10 04:01:25
2 | Bill | Johnson | bill@gmail.com | 2014-06-10 04:01:25
3 | steven | smith | steven@gmail.com | 2014-10-10 12:01:25
返回结果应该是ID为2和3的行
不应返回ID 1,因为日期早于ID 3日期
如何将其添加到下面的查询中
SELECT
users.firstname,
users.lastname,
DISTINCT(users.email),
users.pref
FROM (
SELECT
users.firstname,
users.lastname,
users.email,
users.status,
users.active,
CONCAT(
users.preference_1, ',',
users.preference_2, ',',
users.preference_3
) AS pref
FROM users
) AS users
WHERE users.status = 1
AND users.active = 1
AND users.date = (
SELECT MAX(u.date) FROM users AS u WHERE u.email = users.email
)
LIMIT 10000
ORDER BY users.date DESC LIMIT 1
通过这种方式,您可以按日期对列表进行排序,并仅返回“first elemet”,即具有“最大/最新”日期的列表看起来您希望为每个用户获取最新的行 这里有一个查询可以做到这一点。(它也使用子查询。但我不理解使用子查询进行concat的必要性)
这无法获取您想要的所有详细信息。但是,它为您提供了可能必须运行的查询的基本概念。(1)为什么您仍然使用子查询?(2) 为什么
concat()
中的语法错误没有修复?我已经修复了查询,我必须使用子查询!除了日期问题之外,是否还有其他原因使用子查询?我有一个理论解决方案,涉及使用DISTINCT
和ORDER BY
关键字。我仍然不明白为什么需要返回ID为2和3的行。最新的是ID为3的唯一一行。如果有重复的电子邮件地址,它将返回其最近的日期!我需要subselect,因为有多个列需要合并成一个列,为什么不能在第一个查询中进行concat呢?比如,选择firstname、lastname、email、CONCAT(首选项,,”)作为用户。pref
?有多个首选项列,首选项1、首选项2、首选项3、首选项4谢谢,我已将其添加到问题中。这需要很长时间,直到现在查询还没有返回任何结果。您忘记了不同的部分。添加DISTINCT(users.email)
。难怪查询要花很长时间。另外,它应该是MAX(u.date)
Sorry。DISTINCT不是一个函数。这是一个关键词。更新了答案。
SELECT DISTINCT us.email, us.preference FROM users AS us WHERE us.date = (
SELECT MAX(u.date) FROM users AS u WHERE u.email = us.email
)