我目前正在为一个朋友开发一个网站,但遇到一个我无法解决的问题。

我被要求记录用户登录信息,而我的方法是创建一个包含列的表:


ID
用户身份
login_time
login_ip


现在,如果表看起来像这样:
id-user_id-login_time --------------- login_ip
1 ----- 1 --------- 2016-05-29 17:21:47 --- 11.0.0.1
2 ----- 1 --------- 2016-05-29 17:22:12 --- 11.0.0.1
3 ----- 2 --------- 2016-05-29 17:23:49 --- 11.0.0.1
4 ----- 3 --------- 2016-05-29 17:25:57 --- 11.0.0.1
5 ----- 2 --------- 2016-05-29 17:28:34 --- 11.0.0.1
6 ----- 1 --------- 2016-05-29 17:30:35 --- 11.0.0.1
7 ----- 3 --------- 2016-05-29 17:31:28 --- 11.0.0.1
8 ----- 3 --------- 2016-05-29 17:31:58 --- 11.0.0.1
9 ----- 2 --------- 2016-05-29 17:44:29 --- 11.0.0.1

如何最有效地从第6行获取数据?因为这是“ user_id”为1的用户最后一次登录,有没有办法“询问” mysql以获取具有“ user_id = 1”的最新条目?
我目前的做法是

("SELECT * FROM login_tracking WHERE user_id = 1 ORDER BY id DESC LIMIT 1")


如果tha数据库很小,那不是问题,但是如果数据库更大,在我眼中它将效率很低。

或者将“ login_time”和“ login_ip”添加到用户表中并从那里获取信息是一个更好的选择,这是用户上次登录时并在“ login_tracking”表中保留相同的信息以及过去的登录项的信息?

最佳答案

您原本的选择是最好的选择:

select * from login_tracking where user_id = 1 order by id desc limit 1


但是,请注意在列id和user_id上都创建索引:

create index two_cokumn_index on login_tracking (id , user_id );


这确实可以提高查询性能。

关于php - 获取具有特定值的最新数据库条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37532284/

10-12 18:33