2012-02-03 33 views
0

我有一個完全按預期工作的聯接,除非從右表中選擇的任何和所有字段在它們確實沒有時返回空白。MySQL加入無法從一個表中選擇

SELECT score.recipient, score.amount, u.* FROM score 
LEFT JOIN `users` AS u ON score.recipient = u.id AND u.team_id = ? 
WHERE UNIX_TIMESTAMP(score.date) > ? 

我實際上並不需要整個用戶表,只有users.email - 但沒有字段的工作。結果集看起來像這樣(樣品):

[0] => stdClass Object ([recipient] => 1 [amount] => 1 [id] => [fname] => [lname] => [nickname] => [email] => [phone] => [reg_key] =>) 
[1] => stdClass Object ([recipient] => 103 [amount] => -1 [id] => [fname] => [lname] => [nickname] => [email] => [phone] => [reg_key] =>) 

所列出的所有字段實際上填充。

任何幫助,將不勝感激!我很茫然。

+1

你在PHP端執行SQL執行什麼?看起來像一個PHP問題,而不是我的一個MySQL問題。哦,你確定你需要一個左連接,而不只是一個連接?這可能也是一個問題。 – Aurimas 2012-02-03 21:17:12

+0

有趣 - 我使用Codeigniter及其DB類,但PHP本身相當簡單,幾乎只是'$ query = $ this-> db-> query($ sql,array($ var1,$ var2))' 。除空白字段外,結果集是完全準確的。 – Gavin 2012-02-03 21:19:41

+0

哦,關於JOIN類型 - 我不確定。但是,當我將它更改爲JOIN時,結果集爲空。 – Gavin 2012-02-03 21:23:21

回答

2

如果用內連接替換左連接返回空結果集,則您的連接條件/ where子句中斷。

試試這個(沒有綁定變量及其條件),看看它是否返回任何值:

SELECT score.recipient, score.amount, u.* FROM score 
LEFT JOIN `users` AS u ON score.recipient = u.id 

如果是這樣的話,再看看爲TEAM_ID值/ score.date你 - 我敢打賭您正在使用表格中不存在的綁定值組合。

+1

同意 - 您的u。*值爲空,因爲LEFT JOIN不會識別任何「可連接」匹配,併爲u。*字段返回NULL。 – Aurimas 2012-02-03 21:40:18

+0

啊,你死了。當我跑你的時候,證明這是導致問題的約束價值。我傳遞給team_id和score.date的值爲null。愚蠢的監督在我的最後。 – Gavin 2012-02-04 00:37:25