Opencart 3产品没有获取数据mysql查询不显示产品

时间:2017-11-05 17:53:18

标签: php mysql opencart 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此工作正常,但SELECT * FROM oc_product_description这不起作用,SELECT name FROM oc_product_description此工作正常......

这是我的完整代码

<?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 个答案:

答案 0 :(得分:1)

问题似乎是您在oc_product_description中没有任何匹配的产品行,或者您在该表中对这些产品的描述的值不同于language_id 1

虽然您使用LEFT JOIN加入说明,但WHERE条件正在使用表oc_product_description的列,这相当于将其转换为INNER 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,所以如果条件失败,它只会影响连接。

请注意,如果products表中有一个包含默认说明的列,则可以使用该列而不是'(no description found)'