2012-08-27 42 views
1

我試圖找到我的應用程序的兩個用戶之間的相似之處。我已經測試了下面的查詢只是利益屬性,它工作正常:使用FQL查找兩個Facebook用戶之間的相似性

SELECT interests FROM user WHERE uid=me() AND interests IN 
(SELECT interests FROM user WHERE uid = $targ_id) 

我想將其擴展到找到了下列屬性的相似性:movies, tv, music, books。修改SELECT語句是微不足道的,但我不確定如何執行IN子句。這就是我試圖做:

SELECT interests, movies, tv, music, books FROM user WHERE uid=me() 
AND (interests, movies, tv, music, books) IN 
    (SELECT interests, music, tv, movies, books FROM user WHERE uid = $targ_id) 

這又發表了以下錯誤:

{ 
    "error": { 
    "message": "(#601) Parser error: unexpected ',' at position 82.", 
    "type": "OAuthException", 
    "code": 601 
    } 
} 

如何調整這個FQL查詢,使其工作?

回答

2

我不認爲你將能夠比較使用FQL IN操作兩個用戶的利益。字段interests,movies,books等是字符串,而不是數組。您需要使用字符串操作,如strpos()substr()。 FQL沒有LIKE操作。

您可以嘗試編寫一個巨大的FQL查詢,將逗號分隔開,然後將這些結果相互比較,但我認爲將它們放入腳本並執行此操作會容易得多後端。否則,如果我的movies是「Jaws,Tron」,而你的電影是「大白鯊,星球大戰,Tron」,並且由於字符串不同,你將不會進行比賽。

+0

啊謝謝cpilko - 你是對的!它們存儲在字符串中 - 該死的。我對你在最後一段中的含義有些困惑 - 你是否在建議大查詢方法? – user1058210

+0

不,我不推薦它。我不認爲我會嘗試將它寫入一個領域,因爲我不能保持strpos和substras的直線。獲取數據並在您的服務器上進行分析。 – cpilko

+0

好的,謝謝!所以有如下幾點:1)以數組形式獲取兩個用戶的配置文件信息。 2)對於每個參數,分解字符串並比較值。如果有匹配,則將其添加到「commonDetails」數組中。 3)輸出陣列? – user1058210

0

您是否嘗試過配置權限和擴展權限?

您的請求有錯誤。您不能在關閉AND中使用多列。也許你應該試試這個:

SELECT interests, movies, tv, music, books FROM user 
WHERE uid=me() 
AND (interests) IN (SELECT interests FROM user WHERE uid = $targ_id) 
AND (movies) IN (SELECT movies FROM user WHERE uid = $targ_id) 
AND (tv) IN (SELECT tv FROM user WHERE uid = $targ_id) 
AND (music) IN (SELECT music FROM user WHERE uid = $targ_id) 
+0

嗨達米恩 - 是的,我很確定我已經正確配置了權限。這個錯誤似乎表明問題在於我寫的語法。我認爲問題在於我如何處理IN聲明。沒有爲每個單獨的參數指定子查詢,我想不出一種方法...這是INSANITY! – user1058210

+0

好吧,我看到了這個問題,你的FQL請求包含錯誤。我試過這個: AND選擇興趣,電影,電視,音樂,書籍用戶WHERE uid = me() AND(興趣)IN (SELECT interest from用戶WHERE uid = $ targ_id) AND (SELECT短片,用戶其中uid = $ targ_id) AND(電視上) (選擇電視從用戶其中uid = $ targ_id) AND(音樂)的 (選擇樂從用戶其中uid = $ targ_id)' 它似乎工作。 也許你可以縮小它;) –

+0

哈哈是啊我試圖避免這一點 - 雖然這比我以前提出的更好!我試過你的查詢,並且不會拋出錯誤,但由於某種原因它沒有返回正確的數據。如果我在(interest)IN(SELECT interest FROM用戶WHERE uid = $ targ_id)子句後刪除所有內容,它將返回數據,但如果我在其餘部分中添加它則不會。它看起來像查詢可以告訴它返回的數據,只有在所有條件爲真的情況下,出於某種奇怪的原因... – user1058210

相關問題