2010-02-23 131 views
0

我有形式查詢優化

SELECT UID1,UID2從相知的查詢WHERE UID1 IN(SELECT UID2從相知WHERE UID1 = '$ user_ID的。')和UID2 IN(SELECT UID2從相知WHERE UID1 = '$ user_ID的。 ')

現在的問題是,嵌套查詢

SELECT UID2從相知WHERE UID1 =' $ user_ID的。'

返回非常大量的ID(約5000)。

友表的結構是uid1(int),uid2(int)。此表用於確定兩個用戶是否作爲朋友鏈接在一起。

任何解決方法?我可以用不同的方式編寫查詢嗎?還是有其他方法可以解決這個問題。我相信我不是第一個遇到這樣問題的人。

任何幫助將不勝感激。

+0

是否想獲取所有'。$ user_id'的好友的用戶? – 2010-02-23 10:09:13

+0

除了找到朋友,我也想找到朋友之間的共同朋友。 – 2010-02-23 10:41:22

回答

0

您可以通過使用單個連接和OR語句來消除一個子查詢。

但是,要消除任何雙行,您只需要返回DISTINCT行。

SELECT DISTINCT f1.uid1, f1.uid2 
    FROM friend AS f1 INNER JOIN 
    friend AS f2 ON (f1.uid1 = f2.uid2 OR f1.uid2 = f2.udi) 
    WHERE f2.uid1='.$user_id.'