Управление данными, полученными от запросов Facebook \ вызовов API - PullRequest
0 голосов
/ 11 марта 2012

Я немного поигрался с Facebook api, и есть проблема, я использую Multiquerying, чтобы получить все страницы, которые понравились пользователю. поэтому я делаю один вызов, чтобы получить все страницы, которые понравились пользователю, а затем еще один вызов, чтобы получить названия страниц. Я получаю 2 списка, один из них page_ids и один page_names:

queries.add("SELECT uid,page_id,created_time FROM page_fan WHEREuid="+userId,"page_likes");
queries.add("SELECT name,page_url FROM page WHERE page_id IN (SELECT page_id FROM #page_likes)","pagedata");

Есть ли способ, что вместо отображения 2 списков, я получу один список с именем страницы под его идентификатором страницы? что-то вроде этого: "123214211" -> "кока", "123213" -> "пепси"

, что было бы гораздо полезнее, чем просто 2 списка, поэтому вам нужно соединиться между ними. Допустим, мне нужно получить комментарии к фотографиям, поэтому у меня будет один запрос к фотографиям, второй запрос к комментариям. Но как я узнаю, какие комментарии подходят к какой фотографии?

Спасибо, впереди

1 Ответ

1 голос
/ 11 марта 2012

Я лично не использовал API Facebook, но, посмотрев его, вот что я могу сказать. Они не позволяют идентифицировать несколько таблиц / сущностей в одном запросе, и, как я вижу, это означает, что нет никакого способа использовать JOIN любого вида в запросе, который в основном и является тем, что вы запрашиваете. Практически все системы реляционных баз данных способны выполнять JOIN, но я думаю, что Facebook, вероятно, решил не разрешать эту опцию, чтобы быть уверенным, что третьи стороны, использующие свои API, не создадут слишком сложный SQL, который потребует от их серверов больше времени на обработку , Я думаю, что вам просто нужно написать метод AS3, который имеет дело с комбинацией двух списков, я считаю, что он может быть написан в общем виде, где он может быть использован повторно без изменения метода. Я бы предложил создать «класс-обертку», который имеет два свойства: одно с объявленным типом объекта, а другое типизированное как коллекцию некоторого вида. Я бы предложил следующее (в псевдокоде, написанном настолько близко к реальности, насколько это возможно без реального тестирования :)):

public class JoinWrapper
{
    public var originalObject:Object;
    public var childrenCollection:ArrayCollection = new ArrayCollection();
}

public class JoinUtil
{

    public static function joinThings(query1Results:ArrayCollection, query1JoinProperty:String, query2Results:ArrayCollection, query2JoinProperty:String):ArrayCollection
    {
        var tempCollection:ArrayCollection = new ArrayCollection();
        for each(var object:Object in query1Results)
        {
            var jw:JoinWrapper = new JoinWrapper();
            jw.originalObject = object;
            for each(var anotherObject:Object in query2Results)
            {
                if(object[query1JoinProperty]==anotherObject[query2JoinProperty])
                    jw.childrenCollection.addItem(anotherObject);
            }
            tempCollection.addItem(jw);
        }
        return tempCollection
    }
}
...