FQL where子句中的if语句或case

时间:2014-04-03 15:46:35

标签: facebook if-statement facebook-fql case where-clause

我使用FQL从Facebook接收数据。更具体:来自粉丝页面的公共活动的数据。

现在我的查询仅接受具有之前或之前的开始时间的事件。因此,如果时间是15:01且start_time是15:00,则事件不在列表中。这就是我需要帮助的地方。您需要知道的是,并非所有事件都有end_time。所以我要么在那里做if语句或case where子句。

我的原始代码:

SELECT
        name, pic, start_time, end_time, location, description, eid, host
    FROM
        event
    WHERE
        eid IN ( SELECT eid FROM event_member
        WHERE uid = 1
        OR uid = 2 )
    AND
        start_time >= now()
    ORDER BY
        start_time desc

我试图输入以下代码而不是start_time> = now(),但代码没有用。

            CASE
            WHEN end_time IS NULL then 'start_time >= now()'
            ELSE 'end_time >= now()'

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

FQL不允许使用if语句;但是,我建议更好地解决您的问题是完全忽略end_time并根据start_time范围选择事件。例如,这将在7天前或7天后发生事件:

SELECT
    name, pic, start_time, end_time, location, description, eid, host
FROM
    event
WHERE
    eid IN (
        SELECT eid FROM event_member
        WHERE uid = 1 OR uid = 2 
    )
    AND
    (
        start_time >= (now() - (60*60*24*7)) AND
        start_time <= (now() + (60*60*24*7))
    )
ORDER BY
    start_time desc

答案 1 :(得分:0)

我发现FQL中既不允许使用if语句也不允许使用case语句。

我在http://steve.veerman.ca/2012/facebook-api-fql-tutorial/

找到了可用功能,运营商等的列表

我的解决方案是从查询中删除以下内容:

    AND
    start_time >= now()

我还在select语句中添加了now(),以获取当前时间(尽管我可以在PHP中执行此操作)。

然后我会把所有事件都拿出来,尽管它们有多相关。我希望他们用if语句对它们进行排序,并比较start_time和end_time,如果它有end_time。