2013-05-17 2 views
0

В настоящее время я пытаюсь получить данные (M_Name) из таблицы Merchant.Не удалось получить данные из другой таблицы в 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); 
} 
?> 

Когда я запускаю этот 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

Я предпочел бы использовать функцию mysql LEFT JOIN и получить все соответствующие данные при первом запросе из обеих ваших таблиц.

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

так что вам не придется делать какие-либо дополнительные запросы, и вы можете хранить значение непосредственно в массиве

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

Тогда я хотел бы, чтобы вы помнили, что mysql_* функции устарели, так что я бы посоветовал вам для переключения на mysqli или PDO

+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']; 
Смежные вопросы