2

2012年に友達の最も気に入った写真を取得しようとしています。次のクエリを実行しました。

SELECT pid, caption, aid, owner, link, src_big, src_small, created, modified, like_info 
FROM photo WHERE created > 1325356200 and aid 
IN (SELECT aid FROM album WHERE owner
IN (SELECT uid2 FROM friend WHERE uid1=me()))
ORDER BY like_info.like_count DESC LIMIT 30

一番好きな30枚の写真を降順で表示しています。しかし、写真を調べたところ、リストが正しくないことがわかりました。私の友達の最も好きな写真のいくつかはリストにありません。クエリを何度も調べました。このクエリの何が問題なのか理解できませんでした。このクエリで目的の結果が得られない理由を誰かが見つけられるように助けてもらえますか?どんな提案でも大歓迎です。

4

1 に答える 1

3

この問題は、すべてのFQLクエリのデフォルトのLIMIT値(LIMIT 100)が原因です。

  1. まず、SELECT uid2 FROM friend WHERE uid1 = me()クエリが実行され、100人の友達が出力されます

  2. 次に、 SELECT aid FROM album WHERE owner IN(..100 Friends ...)クエリが実行され、100人の友達のs100アルバムが出力されます。

  3. 最後に、SELECT pid、caption、aid、owner、link、src_big、src_small、created、modified、like_info FROM photo WHERE created> 1325356200 and aid IN(... 100 Aid ...)ORDER BY like_info.like_count DESC LIMIT 30 query run 100枚のアルバムの結果を出力します。

どうやら結果はあなたが望んでいたものではありません。自分で制限を上げようとするかもしれませんが(たとえばLIMIT 1000)、それは私にはうまくいきませんでした。正確な結果を得る唯一の方法はグラフAPIを試すことですが、実行には非常に長い時間がかかり、最終的には死んだ選択になります。

私の答えの証拠

これらのコードを実行してみてください

SELECT pid, caption, aid, owner, link, src_big, src_small, created, modified, like_info 
FROM photo WHERE created > 1325356200 and aid IN (SELECT aid FROM album WHERE owner IN
(SELECT uid2 FROM friend WHERE uid1=me() order by rand() ))ORDER BY like_info DESC LIMIT 30

rand()関数を使用して友達をランダム化しました

SELECT pid, caption, aid, owner, link, src_big, src_small, created, modified, like_info FROM
photo WHERE created > 1325356200 and aid IN (SELECT aid FROM album WHERE owner IN (SELECT 
uid2 FROM friend WHERE uid1=me() ) order by rand() ) ORDER BY like_info DESC LIMIT 30 

ここでは、rand()を使用してアルバムをランダム化しました。両方のクエリをランダム化してみることができます。あなたがこれらのコードを実行するたびに、それは非常に異なる結果をもたらし、あなたはより多くのいいねを持ったより多くの写真があることに気付くでしょう。

于 2013-01-03T03:51:38.487 に答える