2008-06-11

Mootools 1.2 正式上線

今天突然發現 beta 已久的 Mootools 1.2 終於進入正式版了
多了不少新的函數與物件
連官方網站也整個換過

可惜的是 Ajax 連結物件跟 v1.11 完全不同
雖然在連接上更容易些
在撰寫上也更加精簡化了
整個 framework 也變小了
可是對於以前的架構卻完全不同

為了提升這個版本
卻要改幾萬行程式
為了 PDO 的使用就已經有不少要改了
再加上 mootools 的 Ajax
這不是一天兩天可以搞定的

雖然 v1.2 好用歸好用
在實質運算上的效率考量
再加上是不是改寫後會提升開發速度
這一切看來要多觀望一下
2008-06-07

將查詢結果新增至資料表 INSERT for SELECT [MySQL]

最近愛上的這個技巧,一整個就只有方便而已,將查詢結果直接寫入資料表中,唯一的缺點就是沒有錯誤跳過,只要錯了一行,後面的筆數就會被放棄,所以在 SELECT 的時候就要濾掉會錯誤的筆數

INSERT INTO orderlist (book_id, last_time)
SELECT book_id, MAX(time) FROM orders;


參考文章:
MySQL 將查詢結果存入資料表

Aptana 中文亂碼問題(Snippets,Code Assist Profiles)

Aptana 中文亂碼雖然這已經不是問題了,而且也有很多網站提出解決方法了:

Windows選單→ Preferences → General → Content Types,選擇 Text ,在下方指定默認編碼為UTF-8,並添加文件類型,如*.js

如果文檔的編碼不是UTF-8就指定成相應的編碼。不過還是建議使用UTF-8編碼

雖然這個已經解決了,可是 SnippetsCode Assist Profiles 這兩個工具欄卻還是有亂碼的問題,所有的註解和說明都變成亂碼,在 Shan 的提點下找到亂碼的根源,發現原來是 Aptana 在讀檔時採用雙位元檢查,造成檔案編碼跑掉,改善的方法就是將這兩個工具欄的檔案改成 Big5 編碼格式(windows)

PS:Linux 則使用 UTF-8
2008-06-06

GROUP_CONCAT 筆數串接函數 [MySQL]

這是一個跟 COUNT() 類似的聚總函數,用來串接結果,函數說明如下:
GROUP_CONCAT([DISTINCT] expr [,expr ...]
    [ORDER BY {unsigned_integer | col_name | expr}
    [ASC | DESC] [,col_name ...]]
    [SEPARATOR str_val])

-- DISTINCT 唯一值設定
-- ORDER BY 排序設定
-- ASC|DESC 排序方式
-- SEPARATOR 間隔字串(預設是 ',')



不過今天在使用時卻發現忽視已久的問題,這個函數是有上限值的,可以透過設定 group_concat_max_len 變數變更(預設 1024)

參考文章:
MySQL 5.0 Reference Manual :: GROUP BY (Aggregate) Functions
MySQL的几个实用字符串函数
2008-06-04

CASE 指令,MySQL 的 switch 與 if else

今天在玩 CASE 這個指令,雖然已經在同學 黑色 深淵 的 Blog 中看到過了,為了明確瞭解這個指令的語法及功能,今天花了一點時間實證。
  1. 必須依附在 SELECT,UPDATE,INSERT,DELETE 下
  2. 不可用在區段中加其他動作
  3. 具有 switch 與 if else 兩種架構

-- switch 的用法
SELECT CASE col
    WHEN 100 THEN '1'
    WHEN 50 THEN '2'
    ELSE '3'
END
FROM table;

-- if else 的用法
SELECT CASE
    WHEN col>100 THEN '1'
    WHEN col>50 THEN '2'
    ELSE '3'
END
FROM table;


在需要對欄位做多種情況區分時,這個指令就很好用,可惜不行加入其他動作,例如:
CASE 
    WHEN EXISTS(SELECT * FROM table WHERE id=1)
    THEN (UPDATE table SET txt='test' WHERE id=1)
    ELSE (INSERT INTO table(id,txt) VALUES(1,'text'))
END;


參考文件:
MySQL 5.1 Reference Manual :: 21.2.10.2 CASE Statement
mysql语句中用if的例子
2008-06-03

IF(exp1,exp2,exp3) 好用的 MySQL 函數

最近在找 MySQL 函數時,忽然看到這個函數,它的使用方法就跟三元運算子一樣,在 select 時做資料判別還蠻方便的,而且查詢時的效率也沒有太大的影響。

IF(exp1,exp2,exp3)
-- 當 exp1 為 true 時就丟出 exp2
-- 為 false 則丟出 exp3

-- 這個函數是可以允許疊加
IF(exp1,
IF(exp21,exp22,exp23),
IF(exp31,exp32,exp33)
)

-- EX:
SELECT IF(a='1','yes','no');

好用的 Eclipse!我墮落了!

在 Shan 的幫助下,發掘更多 Eclipse 上的功能跟 plugin。

雖然 Shan 愛用的(Remote System Explorer) plugin 不怎麼適合我,少了專案搜尋真是很不方便的說。

但也找到好用的 SQL 工具(Database Explorer),這套並沒有什麼特別的,除了語法加亮和可以直接連結 Database 下 Query之外,並沒更特別的功能,不過至少不用一直在 phpMyAdmin 貼上貼下的。

而且我也終於會用 Eclipse FTP and WebDAV 這套 plugin 了,雖然在使用上還是需要特別小心,要不然他內定的同步機制會將自己 local 端的檔案刪除,出過一兩次意外,我現在都會仔細看他要執行的動作。

當然也少不了 PHPEclipse 和 Aptana 這兩個 plugin,最近剛會使用 Aptana 的程式巨集,這也是編輯工具必備功能之一,雖然這個巨集功能沒有 PHPEclipse 中的好用,只好加減一下了,但Aptana 的巨集有個特點,就是不管在任何檔案類型都可以插入。

其實 Eclipse 本身在文字編輯和專案管理上就有很多不錯的功能了,單字完成、函數提示、刪除行段、複製行段、移動行段等編輯上常用快捷功能,當然還有兩個好用的功能,就是"書籤"和"作業"這兩個記錄器,可以用來分擔大腦的記憶,尤其是在專案規模大到有點難以尋找的時候,這兩個記錄器就會發揮很大的幫助。

用了那麼多方便的工具,哪一天我會不會變成失去魔法的麻瓜!!
2008-06-01

HTML & Smarty、JavaScript、CSS 及 PHP 註解清除器

之前為了上線前去除不要的註解及多餘的空白符號,一直在找合適的工具,可是找到大部分都是 windows 的軟體,想找 Linux 的卻沒找到,於是就自己用 Lex 寫了一些,幾本上我分成四個語言的清除器,設計上是直接覆寫原始的檔案,所以在應用前請先自行複製備份,由於清除器沒有做語法驗證,再撰寫時需要特別嚴謹 ( PS: 程式碼中常被忽略的結束符號 ";" )。

清除規則:
  • HTML & Smarty
    • 清除 < 及 > 前後的空白及換行(\n)符號
    • 清除 HTML 註解 (<!-- 註解 -->)
    • 清除 Smarty 註解 ({* 註解 *})
    • 清除 JavaScript 單行及多行註解 (/* 註解 */ , //註解)
    • 清除 JavaScript 多餘的空白及換行(\n)符號
    • 完整保留單引號及雙引號內的字串
  • JavaScript
    • 清除多餘的空白及換行(\n)符號
    • 清除單行及多行註解 (/* 註解 */ , //註解)
    • 完整保留單引號及雙引號內的字串
  • CSS
    • 清除多餘的空白及換行(\n)符號
    • 清除多行註解 (/* 註解 */)
    • 完整保留單引號及雙引號內的字串
  • PHP
    • 清除行首及行尾的空白符號
    • 清除無用的空白行
    • 清除單行及多行註解 (/* 註解 */ , //註解)
    • 完整保留單引號及雙引號內的字串

這已經經過很多次的測試跟修改了,目前還沒有出現特別的狀況,有需要的人可以用用看,在 linux 上必許要安裝 flex 及 gcc 才可以編譯,當然 windows 也有的flex 及 gcc 的編譯器。

檔案連結