FQL
FQL
FQL(Facebook Query Language)是著名社會化網路服務網站Facebook(中文也譯為臉譜網)提供給應用開發者使用的一種類似SQL(結構化查詢語言)的資料庫查詢語言。FQL 只允許在 from 子句中出現一個數據表,但是允許在 select 和 where 子句中使用子查詢。
FQL的數據聚合能力與其他大多數API函數相同,但是,如果你嫌FQL有些冗餘的話,你應該意識到FQL還有一些非常明顯的優勢,包括以下幾點:
1.FQL更加高效。如果使用API來獲取數據,你將獲得記錄的所有屬性,包括你並用不著的那些部分。而通過使用FQL的Select子句,你可以只取出那些你要用到的屬性,實際上FQL並不支持SELECT *這樣一次取出所有屬性的做法,從效率考慮。
2.對於複雜的請求,FQL能有效減少對伺服器的請求次數。
3.FQL是Web語言無關的。Facebook的API有好幾個版本,每個版本都是針對特定的編程語言的,如php,java,Ruby on Rails。所以,如果你工作在多語言編程環境,你的Facebook代碼必須針對某一特定語言進行編寫。相反,由於FQL與編程語言無關,你可以在任何環境下使用相同的FQL代碼。
實際上,API調用是經過低層次的FQL進行包裝過的。即使你喜歡在大多情況下使用API,有時你也會從效率方面考慮而使用FQL。
要進行一次FQL查詢,你應該使用fql.queryAPI方法,在PHP中可以這樣調用:
$result_set = $facebook->api_client->fql_query("SELECT name from user WHERE uid=634164579″);
fql.query方法將指定的fql查詢語句發送給Facebook進行處理,響應結果將以數組的形式返回給PHP客戶端。也可以以XML或者JSON的格式返回給其它客戶端。在PHP中你得到的響應結果可能如下所示:
( [0] => Array ( [name] => Mert TOL ) )
由於Facebook會為你管理資料庫的打開與關閉操作,因此你沒有必要在自己的應用中顯示地進行這些操作。
儘管FQL基於SQL語法,但兩者並不相同。SQL被設計為能夠在各種環境中使用的靈活的查詢語言。而FQL則是針對特定的數據集來操作的。所以與SQL相比,FQL在語法上作了諸多限制。如下:
1.不允許使用SELECT *,即你必須顯式說明你將要獲取所有的屬性欄位。
2.FROM子句只能包含一個表。
3.WHERE子句中至少有一個欄位是可索引的。
4.JOIN操作是不允許的(IN子查詢卻可以)。
5.不支持GROUPBY, ORDER BY, COUNT, 和 LIMIT 這些關鍵詞。
6.不支持BETWEEN 和LIKE 操作。
7.由於你只有隻讀許可權,所以不可能進行一些增刪改操作,如UPDATE,INSERT INTO ,DELETE,CREATE TABLE等。