我目前正在为朋友开发一个网站,我遇到了一个我无法解决的问题。
我被要求记录用户登录,我的方法是创建一个包含列的表:
现在如果表格看起来像这样:
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")
如果数据库很小,这不是问题,但如果数据库变大,那么我的眼睛就会效率低下。
或者将“login_time”和“login_ip”添加到users表并从那里获取信息是更好的选择,当用户上次登录并保持相同的+过去的登录条目时login_tracking“table?
答案 0 :(得分:0)
你原来的选择是最好的选择:
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 );
这将真正提高查询性能。