Я получаю всех своих друзей как массив, используя
$graph_url = "https://api.facebook.com/method/fql.query?access_token=" . $access_token . "&query=SELECT+uid,name,work.position.name+FROM+user+WHERE+uid+IN+ (SELECT+uid2+FROM+friend+WHERE+uid1+=+me())&format=json";
И я хочу поставить условие для получения друзей, чья служебная позиция называется «dev». Я попытался с помощью FQL
как
$graph_url = "https://api.facebook.com/method/fql.query?access_token=" . $access_token . "&query=SELECT+uid,name,work.position.name+FROM+user+WHERE+uid+IN+ (SELECT+uid2+FROM+friend+WHERE+uid1+=+me())+AND+strpos(work.position.name,'dev')>=0&format=json";
Но это дает мне пустой массив, даже некоторые из них удовлетворяют условию. Может кто-нибудь предложить мне правильный способ приблизиться к этому … Спасибо в Advance.
Это было поставлено и рядом других людей, см.
https://stackoverflow.com/questions/17382739/how-to-use-strpos-in-fql-query
https://stackoverflow.com/questions/18115546/strpos-in-fql-query
Я предполагаю, что вы не можете использовать strpos () для полей, которые содержат массив, а не объект (который вы можете ссылаться через object.subobject.field).
«Доказательство» моего подозрения: если вы попытаетесь найти ваши текущие местоположения ваших друзей (что является подобъектом объекта пользователя, а не массивом), он работает:
SELECT uid,name,current_location FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) and strpos(current_location.city, 'M') = 0
Там я ищу всех моих друзей, живущих в городе, начиная с «М».
В конечном счете, вы также можете проанализировать ресули на стороне клиента, если FQL не сможет решить вашу проблему.
И, кстати, я думаю, вы должны использовать другую конечную точку для своих запросов FQL:
http://graph.facebook.com/fql?q=...
Вы можете использовать strpos & lower для некоторых подмножеств данных, которые уже есть с индексируемым полем.
В вашем примере у вас нет индексного поля, поэтому ур получает пустой массив.
SELECT uid,name,work.position.name FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND work.position.name
Этот оператор fql дает список друзей, которые дали значение для work.position.name, а затем применили условия к этому объекту json.