SELECT eid, start_time, name FROM event WHERE (eid IN (SELECT eid FROM event_member WHERE (uid = me() AND start_time < 1317006752)))
此FQL查询应返回在1317006752
但是,它会将有效事件IN ADDITION返回到此
{
"eid": 239526399426862,
"start_time": 1317448800,
"name": "Nick Grimshaw, The 2 Bears, S.C.U.M. & more! Friday 30th Sept, Only £4.50"
}
如果我错了,现在纠正我,但1317448800
大于1317006752
。
您可以通过转到event page,点击某些内容(即不参加),然后run the query here
来验证这一点。答案 0 :(得分:0)
我认为您的问题可能是活动创建者与活跃用户之间的时区差异。 Facebook提供此通知:
请注意,start_time和end_time是输入的时间 由活动创建者。 Facebook Events没有时区概念,因此, 通常,您不应该将返回的值视为已发生的值 在任何特定的绝对时间。显示事件时 facebook,没有指定或暗示时区。
答案 1 :(得分:0)
显然,event_member中的start_time纯粹用于加速对event_member表的查询,这可以返回很多结果。似乎事件的start_time更新时它没有更新。您的查询应如下所示才能正常工作,请注意区别:
SELECT eid, start_time, name
FROM event
WHERE eid IN (SELECT eid
FROM event_member
WHERE uid = me() AND start_time < 1317006752)
AND start_time < 1317006752
我同意这是一个错误。
答案 2 :(得分:0)
今天我遇到了这个问题,即将举办的活动: 正确的FQL应该是
SELECT eid,name,description,location,start_time,end_time,pic_big FROM event WHERE eid IN (SELECT eid FROM event_member WHERE start_time>=PLACE_UNIX_TIMESTAMP AND uid=PLACE_UID_HERE) ORDER BY start_time ASC
修改强>
通过以下方式获取此查询的结果:
$sql = '/fql?q=SELECT+eid,name,description,location,start_time,end_time,pic_big+FROM+event+WHERE+eid+IN+(SELECT+eid+FROM+event_member+WHERE+start_time>={time}+AND+uid={id})+ORDER+BY+start_time+ASC';
$fql_query_result = file_get_contents('https://graph.facebook.com/' . $sql '&access_token={token}');
$data = json_decode($fql_query_result,true, 512, JSON_BIGINT_AS_STRING));
重要的是将JSON_BIGINT_AS_STRING选项添加到json_decode以防止eid成为短端浮动表示
编辑2: 因为const JSON_BIG ...仅可从php5.4.X +获得:
if (defined('JON_BIGINT_AS_STRING')) return json_decode($fql_query_result,true, 512, JSON_BIGINT_AS_STRING);
return json_decode(preg_replace('/([^\\\])":([0-9]{10,})(,|})/', '$1":"$2"$3', $fql_query_result),true);
来源:http://www.pixelastic.com/blog/321:fix-floating-issue-json-decode-php-5-3