私は現在、友人のためのウェブサイトを開発しており、私は満足して解決できない問題に遭遇しました。特定の値を持つ最新のデータベースエントリを取得します
- ID
- のuser_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")
だろうが、それが大きく成長している場合、それは私の目には非効率的になります。
「login_time」と「login_ip」をusersテーブルに追加してそこから情報を取得する方が良いでしょうか?ユーザーが最後にログインして同じログイン情報を"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);
これは本当にクエリのパフォーマンスが向上します
* "行6のデータを最も効率的に取得するにはどうすればいいですか?" * 'WHERE user_id = 1 and id = 6'です。 –
* "mysqlに" user_id = 1 "という最新のエントリを取得する方法があります。 - 最近の日付と時刻で注文することができます。 –
@ Fred-ii-この場合はIです行のIDを知っていますが、動的に取得したいのですが、すべての値を取得して順序付けをしているのは、私の目には効率的ではないのでやっていないことです。手動で最初に私が必要としないものをすべてカットすることなく。 –