【问题标题】:Couldn't get data from another table in MySQL无法从 MySQL 中的另一个表中获取数据
【发布时间】:2013-05-17 08:03:42
【问题描述】:

我目前正在尝试从名为 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}

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

【问题讨论】:

    标签: php mysql database json


    【解决方案1】:

    我宁愿使用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_* 函数已被弃用,所以我建议你切换到 mysqli 或 PDO

    【讨论】:

    • 谢谢兄弟!你刚刚救了我 ^_^ 我只在当前项目中使用 mysql_*...我想将来不会做任何开发:X
    【解决方案2】:

    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)
    

    【讨论】:

    • @Adder...我应该怎么做?
    【解决方案3】:

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

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

    但最好你先犯一些错误

    【讨论】:

      【解决方案4】:

      你可以使用以下一个

      $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'];
      

      【讨论】:

        【解决方案5】:
        $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 是你想要的)并且非常消耗资源。

        【讨论】:

        • @Herode...我该怎么做?
        猜你喜欢
        • 2016-09-28
        • 2020-03-24
        • 2021-11-05
        • 2018-12-08
        • 1970-01-01
        • 2019-05-02
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        相关资源
        最近更新 更多