2013-02-09 58 views
2

我有這樣的SQL查詢:在PHP腳本MySQL查詢將返回NULL列

SELECT * 
FROM products p, products_description pd, products_to_categories c left 
    join products_sex ps on (c.products_id = ps.products_id), 
    categories cc 
WHERE p.products_id = pd.products_id 
     and p.products_id = c.products_id 
     and cc.categories_id = c.categories_id 
     and p.products_status = 1 
     and p.products_price >= 15.8333333333 
     and p.products_price <= 40 
     and p.products_quantity > 0 
     and (ps.products_sex = "U" or ps.products_sex is null) 
     and (c.categories_id = 77 or cc.parent_id = 77) 
ORDER BY products_sort_order, p.products_date_added desc, pd.products_name ASC 
LIMIT 0, 40 

如果我在MySQL客戶端(命令行或Navicat的)執行它,我得到這樣的結果:

products_id | dodavatelia_id ... 
2153   | 67    ... 

但是,如果我得到的產品通過PHP腳本(與mysql_query中mysql_fetch_assoc),我得到:

array ( 
    'products_id' => NULL, 
    'dodavatelia_id' => '67', 
    ... 
); 

爲什麼我得到products_id NULL?

回答

2

這可能是因爲您要加入包含具有相同名稱的列的多個表,因此您可以使用此名稱檢索最後一列的值(可能爲NULL)。

你應該把一個別名,列要檢索:在SQL別名

$result['pPropId'] 

更多信息:

SELECT p.products_id AS pPropId, p.* FROM products p, ... 

然後在你的PHP的結果,你可以像這樣訪問你的專欄功能here

編輯:爲什麼它在命令行工作,而不是在這裏?

SQL查詢正常工作,將返回每個名稱列​​。問題是你使用mysql_fetch_assoc(),根據你的結果返回一個關聯數組。而且數組中的同一個鍵不能有多個值。

因此,它可能會在內部執行的操作是$result['products_id'] = p.products_id,但是對於下一個具有相同名稱的列刪除先前的值也是如此。您可以使用mysql_fetch_row(),它不存在此問題。

一個好的做法是列出您真正想要在SELECT中檢索的列,而不僅僅是SELECT *。那麼具有相同名稱的兩列需要不同的別名就變得合乎邏輯了。

+0

謝謝,這就是它。但我不明白,爲什麼它在mysql命令行工作,而在PHP中沒有。 – yetty 2013-02-09 09:54:57

+1

@yetty>因爲SQL查詢工作正常。檢查我更新的答案 – koopajah 2013-02-09 10:00:27