0

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

Web ブラウザーを使用してこの 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}

私は何を間違えましたか、それともまだ何が欠けていますか? 助けてください..ありがとう!

4

5 に答える 5

0

whileの代わりにクエリから結果を返す必要があるように見えますが、

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

しかし、最初にいくつかのエラーハドリングを行ったほうがよいでしょう

于 2013-05-17T08:17:26.330 に答える
0

はDBから値を返しません。たとえば、DBへの他のクエリで行ったようにmysql_query("SELECT M_Name FROM MERCHANT WHERE MERCHANT_ID = '".$row["merchant_ID"]."'");、フォローアップする必要があります。mysql_fetch_array

より簡単な解決策がありますJOIN。2 つのテーブルを結合する を使用します。

SELECT offer.*, MERCHANT.M_Name 
FROM offer 
LEFT JOIN MERCHANT ON(MERCHANT.MERCHANT_ID = offer.merchant_ID)
于 2013-05-17T08:14:09.833 に答える
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が必要です)、非常にリソースを消費します。

于 2013-05-17T08:14:57.307 に答える
0

私はむしろLEFT JOINmysql関数を使用し、両方のテーブルから最初のクエリですべての関連データを取得したいと思います

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

余分なクエリを作成する必要はなく、値を配列に直接保存できます

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

mysql_*次に、関数が非推奨であることを覚えておいてほしいので、mysqliまたはに切り替えることをお勧めしますPDO

于 2013-05-17T08:18:13.293 に答える
0

1つ下を使用できます

$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'];
于 2013-05-17T08:18:06.527 に答える