需求:
表中同一個uid(用戶)擁有多條游戲等級記錄,現需要取所有用戶最高等級(level)的那一條數據,且時間(time)越早排越前。這是典型的排名表
+------+-------+--------------+---------------------+ | uid | level | role | time | +------+-------+--------------+---------------------+ | 7 | 1 | 搖滾聖魔 | 2014-06-12 15:01:05 | | 1134 | 4 | 唯我獨尊 | 2014-06-12 15:02:38 | | 1134 | 4 | 唯我獨尊 | 2014-06-12 15:02:39 | | 7 | 3 | 搖滾聖魔 | 2014-06-12 15:02:59 | | 5 | 3 | 韻兒鈴♦ | 2014-06-12 15:04:09 | | 7363 | 6 | 詩荷冰月 | 2014-06-12 15:04:23 | | 6684 | 4 | つ道遠虛空つ | 2014-06-12 15:05:13 | | 7 | 16 | 搖滾聖魔 | 2014-06-12 15:05:46 | | 1 | 2 | 斗土豪 | 2014-06-12 15:05:48 | | 7 | 26 | 搖滾聖魔 | 2014-06-12 15:08:36 | | 6684 | 8 | つ道遠虛空つ | 2014-06-12 15:08:45 | | 5 | 12 | 韻兒鈴♦ | 2014-06-12 15:09:47 | | 6834 | 1 | 無敵追翼 | 2014-06-12 15:10:56 | | 5 | 16 | 韻兒鈴♦ | 2014-06-12 15:11:18 | | 8719 | 1 | 君望赤 | 2014-06-12 15:11:48 | | 6274 | 36 | 五月獨孤 | 2014-06-12 15:12:22 | | 8724 | 26 | 童童 | 2014-06-12 15:12:31 | | 1134 | 32 | 唯我獨尊 | 2014-06-12 15:12:51 | | 7 | 26 | 搖滾聖魔 | 2014-06-12 15:13:38 | | 5 | 25 | 韻兒鈴♦ | 2014-06-12 15:14:48 | | 7757 | 3 | つ清靈旋つ | 2014-06-12 15:16:50 | | 7 | 26 | 搖滾聖魔 | 2014-06-12 15:17:26 | | 5 | 28 | 韻兒鈴♦ | 2014-06-12 15:18:08 | | 7757 | 23 | つ清靈旋つ | 2014-06-12 15:19:29 | | 6274 | 43 | 五月獨孤 | 2014-06-12 15:19:54 | | 8724 | 30 | 童童 | 2014-06-12 15:20:39 | | 7757 | 26 | つ清靈旋つ | 2014-06-12 15:20:58 | | 8707 | 36 | 就是干 | 2014-06-12 15:22:28 | | 7757 | 29 | つ清靈旋つ | 2014-06-12 15:23:05 | | 7757 | 32 | つ清靈旋つ | 2014-06-12 15:24:57 | | 8726 | 10 | 連曦 | 2014-06-12 15:26:01 | | 7363 | 34 | 詩荷冰月 | 2014-06-12 15:26:58 | | 7 | 26 | 搖滾聖魔 | 2014-06-12 15:27:33 | | 5 | 37 | 韻兒鈴♦ | 2014-06-12 15:27:37 | | 8347 | 1 | 無敵 | 2014-06-12 15:28:09 | | 6274 | 47 | 五月獨孤 | 2014-06-12 15:28:13 | | 1 | 32 | 斗土豪 | 2014-06-12 15:29:18 | | 1134 | 46 | 唯我獨尊 | 2014-06-12 15:30:52 | | 7757 | 41 | つ清靈旋つ | 2014-06-12 15:30:56 | | 9 | 34 | 飯飯飯飯の | 2014-06-12 15:31:03 | | 6274 | 48 | 五月獨孤 | 2014-06-12 15:31:18 | | 8724 | 41 | 童童 | 2014-06-12 15:32:30 | | 7757 | 42 | つ清靈旋つ | 2014-06-12 15:34:24 | | 1134 | 48 | 唯我獨尊 | 2014-06-12 15:34:56 | | 1100 | 2 | 聖魔霄 | 2014-06-12 15:35:54 | | 1008 | 21 | ∵嘟嘟冰兒∵ | 2014-06-12 15:36:10 | | 7757 | 45 | つ清靈旋つ | 2014-06-12 15:40:49 | | 3088 | 4 | 戰魂☼凌空 | 2014-06-12 15:41:38 | | 5 | 41 | 韻兒鈴♦ | 2014-06-12 15:41:56 | | 7757 | 46 | つ清靈旋つ | 2014-06-12 15:43:24 |
實現過程:
1.首先對該數據進行2次排序,uid 排序以及等級的降序排序
2.對排序後的結果用uid進行分組,分組後等級降序排序,時間升序排序
實現SQL:
select * from (select a.uid,a.level,a.role,a.time from 數據表 a where order BY a.uid desc,a.level desc) as 別名 group by user_uid order by level desc,time asc limit 30;
我是這樣做的測試:
create table music(
id varchar(10),
title varchar(100),
name varchar(10)
);
insert into music values('2','離別','12354');
insert into music values('15','朋友','5454');
insert into music values('161','送別','4668');
<?php
$conn=mysql_connect("localhost:3307","數據庫用戶名","數據庫密碼");
mysql_select_db("date");
$result=mysql_query("select max(id+0) max_id from music",$conn);
$field=mysql_fetch_row($result);
print_r($field);
?>
結果:Array ( [0] => 161 )
因為mysql中varchar不能用max()所以通過id+0來轉換id類型從而解決這個問題 ,如果你建表時id是整數型的就可以直接用max()了。詳細解釋見:hb.qq.com/a/20110624/000061.htm。
create table #a(address char(2),fenshu varchar(8))
insert into #a values ('a1','s1')
insert into #a values ('a1','s2')
insert into #a values ('a2','s3')
insert into #a values ('a1','s7')
insert into #a values ('a2','s4')
insert into #a values ('a2','s8')
insert into #a values ('a1','s8')
insert into #a values ('a2','s9')
實際語法測試 應該加上 分組條件區別,否則會有重復記錄被取出(a.address = b.address)
select * from #a a
where fenshu in (
select max( fenshu) from #a b where a.address = b.address
group by address)