无法从MySQL中的另一个表中获取数据

时间:2013-05-17 08:03:43

标签: php mysql database json

我目前正在尝试从名为Merchant的表中获取数据(M_Name)。

以下是我的代码:

<?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);
}
?>

当我使用网络浏览器运行这个PHP文件时,即使数据库中存在数据,我也无法获得商家所需的名称...它只会返回“null”。

{"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}

我做错了什么或者我还缺什么?请帮忙......谢谢!

5 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

mysql_query()不返回字符串而是返回资源。你必须获取结果。

另外,不要忘记现在不推荐使用mysql_ *。

<强> [编辑]

如Fabio所述,您宁可在查询中使用JOIN。目前,您正在循环中提出请求。那没用(INNER JOIN或LEFT JOIN就是你想要的)和非常资源的消耗。

答案 2 :(得分:0)

看起来你必须从查询中返回结果而不是while,

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

但是你最好先犯一些错误

答案 3 :(得分: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'];

答案 4 :(得分: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