2012-06-02 52 views
1

所以,我有這個MySQL問題。加入哪裏可以加入,否則不加入

我一直在看LEFT JOIN,INNER JOIN等。而且據我所知LEFT JOIN從左側連接,如果右側部分不存在,它的值將設置爲NULL。如果沒有匹配連接,則使用INNER JOIN,返回空集。

正如你在前面的陳述中看到的,我加入了不同的統計數據等等。但如果uid2不是朋友與uid1這將在我的情況下爲null在我的情況下在朋友的所有領域。*

如何才能得到所有的朋友字段,如果他們是朋友,沒有字段從friends,如果他們沒有。 (我不想在之前做一個單獨的聲明來檢查他們是否是朋友)。

這是我以前statemenet:

SELECT matches.*, statistics.*, friends.*, users.username 
FROM `matches` 
LEFT JOIN statistics ON matches.uid1=statistics.uid 
LEFT JOIN users ON matches.uid1=users.uid 
LEFT JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid 
WHERE matches.mid IN (269,231,131) 
+0

您可以發佈一些示例輸出以顯示您想要實現的功能嗎? – liquorvicar

回答

1

然後你只用INNER JOIN替換最後LEFT JOIN

SELECT matches.*, statistics.*, friends.*, users.username 
FROM `matches` 
LEFT JOIN statistics ON matches.uid1=statistics.uid 
LEFT JOIN users ON matches.uid1=users.uid 
INNER JOIN friends ON matches.uid1=friends.fid AND matches.uid2=friends.uid 
WHERE matches.mid IN (269,231,131); 

然而,這是不可能的選擇不是從friends返回表中的列當他們不能加入時。

+0

不,因爲它然後會返回一個空集,我反而希望除了朋友列以外的所有其他東西。*' – netigger

+0

@DavidEverlöf您不能在一個查詢中更改要返回的列,但 –

+0

好的,謝謝! – netigger

0

我最後還是做了一個LEFT JOIN,然後過濾結果;

$temp = array_filter($temp, "is_not_null"); 

function is_not_null($var) 
{ 
    return ! is_null($var); 
}