FQL had been deprecated by Facebook a while ago, nevertheless I decided to edit the post and add more information. Most of the information posted below had never been documented.
What is FQL?
FQL is a Facebook platform SQL-style interface which can be queried by 3rd party applications using SQL-like syntax.
Some key features:
- FQL does not support joins, but supports sub-queries (including IN keyword).
- Query must be indexable (WHERE clause should include at least one field that is defined as "indexable").
- COUNT is not supported.
- It is possible to select structured fields (e.g. SELECT current_location.zip) or entire structures.
- The output is XML.
FQL vs Graph API
FQL has a WHERE clause, which graph API doesn't have any equivalent of. I'm talking of something more sophisticated than just getting object connections (like user's friends). Examples: get user's friends who are also app users and online in chat, get all events which start tomorrow and not created by myself, etc, etc.
Besides that FQL is more like an extension to the graph API rather than something independent and is used to make queries on graph objects.
AND, OR, NOT, IN, ><=, +-*/
Limit operator format:
LIMIT: OFFSET, ROWCOUNT
LIMIT 5, 5
me() now() rand() strlen(...) concat(...) substr(...) strpos(...) lower(...) upper(...)
FQL vs SQL
ORDER BY is supported, DESC, ASC is supported also, SELECT * not supported. Joins not supported but you can do subqueries.
How to count records
Given that output XML is transferred over the wire one should also take care of the bandwidth. For example we want to get COUNT (only) of all current user friends who installed the current application. COUNT is not supported so we need to fetch all required records and count them on the application side. The query should go like so:
SELECT '' FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = USERID) AND has_added_app = 1
Selecting empty string would reduce the size of the XML dramatically, yet it is very easy to count rows quickly.
Sunday, October 7, 2007 3:42 AM