2015-11-21 42 views
0

我有一個問題,不知道爲什麼我的mysqli查詢在PHP中無法正常工作。php mysqli fetch_assoc忽略左值加入的空值

我有兩個表:

table 1 "reviews" 
id | dateCreated | reviewText | ... 

table 2 "issues" 
id | reviews_id | issueText | ... 

表1包含用戶的評價。表2包含了某些評論的問題(投訴)。然而,一項審查並不一定需要有問題(如果沒有人報告)。查詢是:

SELECT reviews.*, issues.* 
FROM reviews 
LEFT JOIN issues 
    ON reviews.id=issues.reviews_id 
WHERE (reviews.idVenue='6438' OR reviews.idVenue='6444' OR reviews.idVenue='7590') 
ORDER BY 'reviews.updated' DESC 

這工作完全如果回顧一個問題存在(ON子句是真的)。

但是,如果沒有現有的審查問題(ON子句是不正確的),然後reviews.id和issues.reviews_id是在$行,這是獲取與

if($result = $this -> mysqli -> query($qstr)){ 
    while($row = $result->fetch_assoc()){ 
     $temp[] = $row; 
     } 
} 

也都在失蹤$行中缺少其他問題列,因爲它們是NULL。缺少我的意思是,如果我在netbeans調試器中打印$ row或將$ row作爲監視變量,那麼它們不在那裏。它只是不顯示reviews.id和issues.reviews_id。

如果我直接在phpmyadmin中運行上面的查詢,那麼在沒有發現相關問題的情況下,它將返回值爲NULL的所有列。

所以我的問題是,爲什麼PHP忽略NULL值,並不返回他們在$行,但phpmyadmin呢?

謝謝!

+0

您在這兩個表中都有相似的列名稱,而phpmyadmin會顯示兩列,而php會覆蓋第一個值和後面的值;所以如果你有review.id = 10那麼issue.id = null;你會得到一個名爲id = null的列; – ahmad

+0

要解決此問題,請指定列名稱併爲具有相似名稱的列提供別名。 – ahmad

+0

@ahmad:非常感謝!就是這樣!如果您將其作爲正式答案發布,我非常樂意接受它! –

回答

2

下面是我對更多描述性信息的評論,以防將來遇到此問題。

當您調用fetch_assoc php將列名作爲鍵&將它們的值分配爲數組值時,由於數組的鍵是唯一的,所以包含相同ID的任何條目都將被覆蓋。

在您的示例中,兩個評論&問題都有一個名爲'id'的列,因此您將始終從您在select語句中使用的最後'id'列中獲取值。

這個簡單的修復(不必永久更改列名稱)是在查詢中使用別名。 例如:SELECT reviews.*, issues.id as `issue_id`, issues.issueText