2013-05-17 109 views
0

我正在嘗試從名爲Merchant的表中獲取數據(M_Name)。無法從MySQL中的另一個表中獲取數據

以下是我的代碼:

<?php 
$response = array(); 

$link = mysql_connect('localhost','root','') or die ('Could not connect: '.mysql_error()); 
mysql_select_db('ichop') or die ('Could not connect to database'); 

$result = mysql_query("select * from offer") or die(mysql_error()); 

if(mysql_num_rows($result) > 0){ 
    $response["offers"] = array(); 

    while($row = mysql_fetch_array($result)){ 
     $offer = array(); 
     $offer["offer_id"] = $row["Offer_ID"]; 
     $offer["start_date"] = $row["Start_Date"]; 
     $offer["end_date"] = $row["End_Date"]; 
     $offer["o_desc"] = $row["O_Desc"]; 
     $offer["short_desc"] = $row["Short_Desc"]; 
     $offer["merchant_ID"] = $row["Merchant_ID"]; 
     $offer["m_name"] = mysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'"); 

     array_push($response["offers"], $offer); 
    } 
    $response["success"] = 1; 

    echo json_encode($response); 
} else { 
//no offer found 
$response["success"] = 0; 
$response["message"] = "No offer found"; 

echo json_encode($response); 
} 
?> 

當我使用Web瀏覽器中運行這個PHP文件,我不能爲商家獲取所需的名稱,即使數據是存在於數據庫...它只會返回我「空」。

{"offers":[{"offer_id":"1","start_date":"2013-05-17","end_date":"2013-05-18","o_desc":"AAA","merchant_ID":"2","m_name":null}],"success":1} 

我做了什麼錯誤或我是什麼人仍下落不明?請幫助..謝謝!

回答

0

我寧願使用LEFT JOIN mysql函數,並從第一個查詢表中獲取所有相關數據。

SELECT * FROM offer a LEFT JOIN MERCHANT b ON a.Merchant_ID = b.MERCHANT_ID 

所以你不會做任何額外的查詢,你可以直接在數組中存儲你的價值

$offer["m_name"] = $row['M_Name']; 

那麼我想你要記住,mysql_*功能已被棄用,所以我勸你切換到mysqliPDO

+0

謝謝兄弟!你只是救了我^ _ ^我正在使用mysql_ *僅用於當前項目...將來不打算做任何開發我猜:X –

+0

@JackyLau歡迎你 – Fabio

0

mysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'");不會從數據庫返回值,您需要跟隨它,例如mysql_fetch_array,就像您對數據庫的其他查詢一樣。

有一個更簡單的解決方案:使用一個JOIN,它結合了兩個表。

SELECT offer.*, MERCHANT.M_Name 
FROM offer 
LEFT JOIN MERCHANT ON(MERCHANT.MERCHANT_ID = offer.merchant_ID) 
+0

@Adder ...我應該怎麼做? –

0
$offer["m_name"] = mysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'") 

mysql_query()不返回一個字符串,但資源。你必須獲取結果。

此外,不要忘記,mysql_ *現已被棄用。

[編輯]

如前所述法比奧,你寧願使用JOIN您的查詢。目前,您正在循環中提出請求。這是沒用的(INNER JOIN或LEFT JOIN是你想要的)和非常資源的消耗。

+0

@Herode ......我應該怎麼做? –

0

看起來像你必須從查詢,而不是同時返回一個結果,

mysql_fetch_array(mysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'")); 

但最好你做出一些錯誤hadling第一

0

您可以使用下面一個

$resMerchant = mysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'"); 

$rowMerchant = mysql_fetch_assoc($resMerchant); 
$offer["m_name"] = $rowMerchant['M_Name']; 
相關問題