辛星解讀一次在mysql中獲取排名的例項
這裡並沒有考慮到繫結,因此我們還是使用拼湊sql語句的形式,而且並不是在mysql命令列中書寫的,很多條件我們都直接用具體的資料來代替。
首先交代一下需求:
(1)作業儲存在t_score表中,練習儲存在t_exercise表中。
(2)我們需要從練習表和作業表中取出對應的學生成績,而學生資訊儲存在t_user表中。
(3)需要知道某個學生根據某道題的正答率和時間來獲取對應的排名。
然後交代一下基本知識:
(1)對於排名,這裡沒有記錄到表中,我們使用的是@x的變數的形式,需要注意的是@x變數這種是對connection有效的,也就是它是對不同的連線有不同的值的。
(2)對於子查詢的時候必須給被匯出的表指定別名,否則會報錯。
然後我們可以分三級來做這件事:
(1)首先把練習表和作業表的內容統一取出,得到一個新表的統一結構,程式碼如下:
$sqlt = "(select ubint64_student_no,char64_integral,
char64_testbank_num,char64_activities_time from t_score
where char64_activities_no = '$gid'
and char64_testbank_no = '$tbno')
union (select ubint64_student_no,char64_integral,
char64_testbank_num,char64_activities_time from t_exercise
where char64_activities_no = '$gid'
and char64_testbank_no = '$tbno') ";
(2)然後取得所有的排名資訊,程式碼如下:
$sqlz = " ( SELECT @rank := @rank + 1 as rank,
t_user.ubint64_no,char64_user_name,
max(char64_integral/char64_testbank_num) as right_rate,
min(char64_activities_time) as right_time
from ( $sqlt ) as t ,t_user ,(select @rank := 0) b
where t.ubint64_student_no = t_user.ubint64_no
group by t_user.ubint64_no ) ";
(3)最後獲取某個學生的成績,程式碼如下:
$sqly = "select * from ($sqlz) as xin where ubint64_no = 272";
(4)最後我們來看一下生成的程式碼吧:
select * from ( ( SELECT @rank := @rank + 1 as rank, t_user.ubint64_no,char64_user_name, max(char64_integral/char64_testbank_num) as right_rate, min(char64_activities_time) as right_time from ( (select ubint64_student_no,char64_integral, char64_testbank_num,char64_activities_time from t_score where char64_activities_no = '4' and char64_testbank_no = '1') union (select ubint64_student_no,char64_integral, char64_testbank_num,char64_activities_time from t_exercise where char64_activities_no = '4' and char64_testbank_no = '1') ) as t ,t_user ,(select @rank := 0) b where t.ubint64_student_no = t_user.ubint64_no group by t_user.ubint64_no ) ) as xin where ubint64_no = 272
當然啦,這裡只是一個demo,只是為了完成需求而寫的一個示範程式碼,不建議直接拿到程式碼中直接使用,而且在使用它之前應該進行嚴格的引數過濾,而且還要使用繫結機制。
相關文章
- php對mysql簡單讀取的例項PHPMySql
- 獲取元素在頁面中的座標位置程式碼例項
- js獲取元素在頁面中的座標程式碼例項JS
- React獲取元件例項React元件
- Java中Websocket使用例項解讀JavaWeb
- jQuery獲取選中核取方塊的值程式碼例項jQuery
- 在SQL Server命名例項上的SSIS程式包獲取方法SQLServer
- JS獲取跨域的cookie例項JS跨域Cookie
- 獲取選中checkbox核取方塊的值程式碼例項
- ajax讀取檔案中內容的程式碼例項
- 在Windows中執行多個MySQL例項WindowsMySql
- Android在ListView的onTouch事件中獲取選中項的值AndroidView事件
- JavaScript獲取星期程式碼例項JavaScript
- python獲取aliyun ECS例項Python
- 獲取當前Tomcat例項的埠Tomcat
- js獲取指定單元格的內容程式碼例項例項JS
- 設定獲取div元素中的文字內容程式碼例項
- Nacos - 客戶端例項列表獲取客戶端
- 通過反射獲取窗體例項反射
- jquery獲取元素高度程式碼例項jQuery
- 對比分析Java反射獲取例項的速度Java反射
- jQuery獲取指定的li元素程式碼例項jQuery
- js獲取事件的型別程式碼例項JS事件型別
- javascript獲取元素的順序程式碼例項JavaScript
- jQuery獲取視窗尺寸的例項程式碼jQuery
- js獲取數字中的最小數字程式碼程式碼例項JS
- js獲取點選單元格中的內容程式碼例項JS
- Mysql中獲取行號MySql
- 記錄一次獲取czml衛星軌道資料
- javascript獲取視窗大小例項程式碼JavaScript
- javascript獲取主機域名程式碼例項JavaScript
- js獲取當前月份例項程式碼JS
- js獲取事件源物件程式碼例項JS事件物件
- jquery獲取同輩元素程式碼例項jQuery
- js獲取主機域名程式碼例項JS
- javascript獲取元素封裝程式碼例項JavaScript封裝
- javascript獲取url引數程式碼例項JavaScript
- .NET控制檯獲取依賴注入例項依賴注入