一.發現問題:
昨天同事問我如何在mysql中給查詢的結果添加序號列。一時有點懵逼,網上搜索答案,找到以下信息:
二.解決方案:
1.法一:
select (@i:=@i+1) i,a.url from base_api_resources a ,(select @i:=0) t2 order by a.id desc limit 10;
2.法二:
set @rownum=0;
select @rownum:=@rownum+1 as rownum, a.url from base_api_resources a order by a.id desc limit 10
上述兩種方法原理就是,事先定義一個變量,通過變量的遞加以及虛擬表的聯查達到生成序號列的目的。
三.延伸
上述方法本來是對着網上照貓畫虎寫出來的,疑點有兩個:1.@i:=是什么意思?2.select * from table1,table2--兩表之前放個,是什么意思?
1.mysql中變量不用事前申明,在用的時候直接用“@變量名”使用就可以了。
第一種用法:set @i=1; 或set @i:=1; //這里要使用變量來保存數據,直接使用@num變量
第二種用法:select @i:=1; 或 select @i:=字段名 from 表名 where …
注意上面兩種賦值符號,使用set時可以用“=”或“:=”,但是使用select時必須用“:=賦值”
2.第二個問題涉及到的就是mysql多表查詢:
select* from table1,table2 不加任何條件的話,是把兩個表的數據笛卡爾積之后顯示。仔細觀察法一的sql就會發現 t2表其實就一條i=0的數據