在台大 PTT Database 版看到有人問一個問題,我覺得還不錯,問題如下:網頁版
小弟在練習做一個系統遇到以下問題 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | c | 退選 4 | d | 退選 5 | e | 退選 網頁介面如上(用for迴圈+mysql_fetch_object抓出資料) 報名序號 | 姓名 | 志願1 | 志願2 | 志願3 | 志願4 | 志願5 1001 小王 a b c d e 資料庫欄位內容如上 想請問
若使用者想退選志願3~~照理說用update把志願3欄位清掉 網頁再一次抓資料會變成志願3的系所變空的(如下表) 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | | 退選 4 | d | 退選 5 | e | 退選 有沒有辦法在select的時候排除空的那欄 也就是說抓資料的時候,以上述為例,只抓出4筆,變成下表 志願 | 系所 | 功能 1 | a | 退選 2 | b | 退選 3 | d | 退選 4 | e | 退選
我自己也有提供解法,MySQL 跟 MSSQL 都可以做到,單純 PHP 也是可以解決的,底下提供兩種解法,一種是 PHP,一種是 MySQL 可以解決:
select 志願, 系所, 功能 from table where 系所 != '' order by 志願 $i = 1; while() { /* 處理程式陣列 */ $i++; }MySQL 解法:
SET @row = 0; SELECT @row := @row +1 AS rk, 系所, 功能 from table where 系所 != '' order by 志願MSSQL 解法:
SELECT ROW_NUMBER() OVER (ORDER BY NAME) NO, NAME FROM TABLE可以參考 MySQL 這篇:
MySQL Forums :: Transactions :: ROW_NUMBER Simulation
See also
- [SQL] 如何從單一資料表取得每個 key 前 n 筆資料
- 在 Docker 偵測 MySQL 或 Postgres 是否啟動
- 來聊聊 PHP & JavaScript & CSS 的 Coding Style
- 為什麼我選擇使用 Laravel Framework?
- Laravel 搭配 Google, Facebook, Twitter 第三方 OAuth 認證
- 將 wordpress 強制使用 SSL 連線
- PHP 7 vs HHVM Benchmark 比較
- Laravel 50 個小技巧 + Laravel 5.2 新功能
- Laravel Homestead 支援 MySQL 5.7 和 Node 5.0
- PHP-FIG 新網站