post by tommy @ 02 十一月, 2006 15:15
不過最近, 我們替這幾個 php script, 加上一些功能, 去抓取同樣 postgresql 資料庫中的資料, 先行運算後再存回去, 加速我們後續查詢的作業. 這個動作, 也不過就是把原本後頭報表會跑到的一個 SQL 指令, 改放到這個 script 上頭, 如此在資料產生時, 就先計算過一次, 可以避免日後每跑一次報表就算一次的困擾, 算是以空間換取時間的作法.
但是, 下頭這個指令, 怎麼跑都有問題:
select case when (call_anstime > 300 or call_abntime > 300) then '1' else '0' end as over_sl,
count(*) as calls
from cti_call
where call_date = '20061001'
and call_time >= '000000'
and call_time <= '002959'
and call_skill = '5078'
group by 1
這個指令, 在 pgAdmin 上頭跑, 可以正確的得到資料. 如果在 Linux 下頭, 透過 php 的 pgsql 模組, 也可以正確的抓出資料. 就是在 windows 下使用 php 透過 ODBC 處理時, 第一個欄位每次都抓到空值.
試了很久, 一直想不出為什麼... 後來, 把上頭的指令改一下, 變成下頭的樣子:
select case when (call_anstime > 300 or call_abntime > 300) then 1 else 0 end as over_sl,
count(*) as calls
from cti_call
where call_date = '20061001'
and call_time >= '000000'
and call_time <= '002959'
and call_skill = '5078'
group by 1
很神奇的, 資料就可以正確的被抓出來了.
我想, 這可能是 postgresql 的 ODBC driver 或者是 php 的 ODBC module 有問題吧, 也許是無法正確判斷出上頭那個 case when 指令之後產生的資料型別吧. 我們把這個型別, 由字串換成數字後, 整個運作就正常了.