Archive for 九月, 2008

取得兩個日期區間內所有天數

星期三, 九月 10th, 2008
$date1 = '20080830';
$date2 = '20080903';

u_date_range2days($date1,$date2);

function u_date_range2days($date1,$date2) {
  $i = 0;
  while (1) {
    if ($i==0) {
      $days[] = date('Ymd',strtotime($date1));
    } else {
      $days[] = date('Ymd',strtotime($date1.' +'.$i.' days'));
    }
    $i++;
    if ($days[$i-1]==$date2) break;
  }
  return $days;
}

/*
return $days
Array
(
    [0] => 20080830
    [1] => 20080831
    [2] => 20080901
    [3] => 20080902
    [4] => 20080903
)
*/

合併多筆資料到單一欄位

星期三, 九月 3rd, 2008

MySQL 4.1以後有支援一個方便的函數GROUP_CONCAT()

GROUP_CONCAT([DISTINCT] expr [,expr ...]
             [ORDER BY {unsigned_integer | col_name | expr}
                 [ASC | DESC] [,col_name ...]]
             [SEPARATOR str_val])

請直接看執行範例。XD

使用前:

SELECT empno AS '人員代號',ap_id '可用系統' FROM `ct` WHERE empno IN ('0770019','0770485') ORDER BY empno,ap_id
+----------+----------+
| 人員代號 | 可用系統 |
+----------+----------+
| 0770019  | erpchk   |
| 0770019  | erp_qa   |
| 0770019  | msg      |
| 0770485  | erpchk   |
| 0770485  | erp_qa   |
| 0770485  | msg      |
+----------+----------+

使用後:

SELECT empno AS '人員代號', group_concat(ap_id separator ',') AS '可用系統' FROM `ct` WHERE empno IN ('0770019','0770485') GROUP BY empno ORDER BY empno
+----------+-------------------+
| 人員代號 | 可用系統          |
+----------+-------------------+
| 0770019  | erpchk,erp_qa,msg |
| 0770485  | erpchk,erp_qa,msg |
+----------+-------------------+

聰明有極限,愚蠢則無。儲蓄有極限,敗家則無。說理有極限,嘴砲則無。