Ошибка FQL в Facebook - PullRequest
       3

Ошибка FQL в Facebook

1 голос
/ 26 сентября 2011
SELECT eid, start_time, name FROM event WHERE (eid IN (SELECT eid FROM event_member WHERE (uid = me() AND start_time < 1317006752)))

Этот запрос FQL должен возвращать события, которые начались до 1317006752

Однако, он возвращает действительные события ДОПОЛНИТЕЛЬНО к этому

{
    "eid": 239526399426862,
    "start_time": 1317448800,
    "name": "Nick Grimshaw, The 2 Bears, S.C.U.M. & more! Friday 30th Sept, Only £4.50"
  }

Теперь поправьте меня, если я ошибаюсь, но 1317448800 больше 1317006752.

Вы можете убедиться в этом, перейдя на страницу события , щелкните по чему-либо (то есть не посещайте), а затем выполните запрос здесь

Ответы [ 3 ]

0 голосов
/ 27 сентября 2011

Очевидно, start_time в event_member используется исключительно для ускорения запросов к таблице event_member, которая может возвращать множество результатов. Похоже, что он не обновляется, когда обновляется время начала события. Ваш запрос должен быть похож на следующий, чтобы работать правильно, обратите внимание на разницу:

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  

Я согласен, что это ошибка.

0 голосов
/ 13 августа 2012

У меня сегодня была проблема с получением предстоящих событий Правильный 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

EDIT

Выборка результата этого запроса выполняется:

$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, чтобы избежать превращения в кратковременное представление с плавающей точкой

РЕДАКТИРОВАТЬ 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

0 голосов
/ 26 сентября 2011

Я думаю, что вашей проблемой может быть разница в часовом поясе между создателем события и активным пользователем.Facebook предоставляет это уведомление:

Обратите внимание, что время_запуска и время_ конца - это время, которое было введено создателем события.События Facebook не имеют понятия часового пояса, поэтому, в общем, вы не должны рассматривать возвращаемое значение как происходящее в конкретное абсолютное время.Когда событие отображается на Facebook, часовой пояс не указывается и не подразумевается.

...