考虑这样一个表:
id
列设置为自动递增,update_time
列应该是行在表格中插入的日期。
我想简单地为user_id = x的用户获取最新条目,我发现有一些方法:
SELECT * FROM mytable WHERE user_id = x ORDER BY update_time DESC LIMIT 1
并且
SELECT * FROM mytable WHERE user_id = x MAX(update_time)
另一个查询是选择id值最高的行
我不太确定后者的语法(请纠正我)。
这似乎是一项微不足道的任务,但有一个案例是其他人改变了表上的auto_increment值,有时服务器的时间也发生了变化(这种情况在我的情况下并没有发生,但是如果确实!!?)
获取user_id的最新条目行的最安全查询是什么(我的意思是为user_id = x的用户返回weight,height和activity_level的查询)
我是否需要在表格中添加更多列?如果是的话,是什么?
答案 0 :(得分:2)
我喜欢这种联接方法。假设userID + update_time是唯一的...如果它不是,那么它将拉回多行。
select user_id, max(update_time) maxtime from table group by user_id
通过用户ID获取最大更新时间的简单语句。将它用作带内连接的子查询(内连接将用作过滤器)
select t.*
from table t
inner join
(select user_id, max(update_time) maxtime
from table group by user_id
--where user_id = x
)a
on a.user_id = t.user_id and a.maxtime = t.update_time
我注释了user_id = x行的位置......这种方法的优点是你可以立即获得所有用户及其最新用户。
答案 1 :(得分:1)
SELECT * FROM mytable WHERE user_id = x AND update_time = (SELECT MAX(update_time) FROM mytable WHERE user_id = x)
答案 2 :(得分:1)
这真的不一定非常复杂:
SELECT id
FROM table
WHERE user_id = x
ORDER BY update_time DESC
LIMIT 1
这个版本将是最快,最简单,最容易阅读的版本。在各方面都是一场胜利。