在台大
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
Related