2011-04-26 2 views
1

Я пытаюсь сделать многотомный FQL Facebook (через JS SDK FB.api call), чтобы загрузить одну фотографию для каждого из 10 случайных друзей Facebook, где они были помечены (aka «Показывать 10 случайных друзей и их фотографию» «). Вот мой массив Javascript запросов:Найти фотографии каждого из 10 друзей в Facebook FQL?

var queries = { 
      q1:"SELECT uid, name FROM user WHERE uid IN (Select uid2 from friend where uid1 = " + user_id 
       + " order by rand() limit 10) ", 
      q2: "SELECT pid, subject from photo_tag where subject in (SELECT uid from #q1) limit 10", 
      q3:"SELECT src from photo where pid in (SELECT pid from #q2)"}; 

То, что я пытаюсь сделать:

  1. Запрос 1: Получить идентификатор пользователя и имя 10 случайных друзей пользователя.
  2. Запрос 2: Получить идентификатор фотографии и имя субъкта phototags, где идентификаторы пользователей совпавших те из запроса 1.
  3. Query 3: Выберите СРК изображения из фотографий, соответствующих тем в запросе 2.

Проблема заключается в том, что у меня нет пути в Query 2 для выбора записей DISTINCT пользователями. То есть, я не могу сказать Facebook, чтобы вернуть только одну фотографию для каждого пользователя. Прямо сейчас, это произвольно, и все 10 строк могут быть разными фото тегами одного и того же пользователя.

Я мог бы сделать несколько циклов в Javascript и сделать один запрос FQL для pic для каждого совпадающего пользователя, но это просто кажется неправильным. Любые другие предложения о том, как это сделать эффективно, желательно непосредственно в FQL?

Спасибо!

ответ

2

Ну, я решил это некоторое время назад и закрыл это для полноты.

То, что я должен был сделать, это НЕ делать все это за один мультик. Я должен был ПЕРВЫЙ сделать один запрос, чтобы получить случайных друзей, ТОГДА сделайте мультикварку, где мы загружаем случайную фотографию для каждого из этих друзей.

FB.api(
     { 
      method: 'fql.query', 
      query: "SELECT uid, name FROM user WHERE uid IN (Select uid2 from friend where uid1 = " + user_id 
       + " order by rand() limit 8) " 
     }, function (response) { 
      var queries = {}; 
      for (x in response) { 
       if (typeof photoArray[response[x].uid] == 'undefined') photoArray[response[x].uid] = []; 
       photoArray[response[x].uid]['name'] = response[x].name; 
       queries[response[x].uid] = "SELECT src_big, caption from photo where pid in (SELECT pid from photo_tag where subject =" + response[x].uid + " order by rand() limit 1) "; 
      } 

      FB.api(
       { 
      method: 'fql.multiquery', 
      queries: queries 
       }, 
       function(response) { 


        for (y in response) { 
         if (typeof response[y].fql_result_set[0] != 'undefined') { 
          photoArray[response[y].name]['image_src'] = response[y].fql_result_set[0].src_big; 
             // Do what you want with the pics 
         } 
        } 
Смежные вопросы