2017-11-05 18 views
1

私はこのクエリを持っていますが、それはどのようなデータが表示されないですが表示されないデータmysqlのクエリをフェッチできません、私は空白の結果を取得しています:Opencart 3製品は、製品

SELECT * FROM oc_product p 
LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) 
WHERE pd.language_id = '1' 
GROUP BY p.product_id 
ORDER BY pd.name ASC 

私は問題がoc_product_descriptionテーブル(フィールド内だと思います説明)。

私は、これが正常に動作しこれが正常に動作しますが、SELECT * FROM oc_product_descriptionこれが動作しない、SELECT name FROM oc_product_descriptionSELECT * FROM oc_productもしてみてください...

これは私の完全なコード

<?php 
// DB 
define('DB_DRIVER', 'mysqli'); 
define('DB_HOSTNAME', 'localhost'); 
define('DB_USERNAME', 'root'); 
define('DB_PASSWORD', ''); 
define('DB_DATABASE', 'opencart'); 
define('DB_PORT', '3306'); 
define('DB_PREFIX', 'oc_'); 


$db = mysqli_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE); 
if (mysqli_connect_errno()) { 
    echo 'Database connection failed with following errors: ' . mysqli_connect_error(); 
    die(); 
} 


$products = []; 
//$sql = $db->query("SELECT * FROM ". DB_PREFIX ."product p LEFT JOIN " . DB_PREFIX . "product_description pd ON pd.product_id = p.product_id WHERE pd.language_id = 1"); 

$sql = $db->query("SELECT * FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '1' GROUP BY p.product_id ORDER BY pd.name ASC"); 

while ($row = mysqli_fetch_assoc($sql)) { 
    $products[] = $row; 
} 

echo json_encode($products); 

?> 

ある誰私を助けてください...ありがとうございます

答えて

1

この問題は、その製品の一致する行がoc_product_descriptionにないか、それらの製品のテーブルにlanguage_idの値があり、1の値を持っています。

あなたは、一致する記述のないすべての製品の結果がありますので、あなたのWHERE条件は、INNER JOINに変換するのと同じですテーブルoc_product_description、の列を使用している説明に参加するためLEFT JOINを使用しているが、 NULLの値はlanguage_idであるため、条件WHERE pd.language_id = 1は常にfalseになります。

また、あなたが説明せずに製品にも結果を返すために、このようにクエリを書き直すことができ、あなたの説明テーブルの内容を確認してください:

SELECT p.*, IFNULL(pd.name,'(no description found)') as name 
FROM oc_product p 
LEFT JOIN oc_product_description pd ON p.product_id = pd.product_id AND pd.language_id = 1 
GROUP BY p.product_id 
ORDER BY pd.name ASC 

これが動作するかどうか、我々はそうLEFT JOINに条件を移動するので、条件が失敗すると、結合にのみ影響します。

商品表にデフォルトの説明がある列がある場合は、'(no description found)'の代わりにその列を使用できます。