【问题标题】:Opencart 3 products not fetch data mysql query not showing productsOpencart 3产品未获取数据mysql查询未显示产品
【发布时间】:2018-04-17 21:28:36
【问题描述】:

我有这个查询,但它没有显示任何数据,我得到空白结果:

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);

?>

请任何人帮助我...谢谢

【问题讨论】:

    标签: php mysql opencart opencart-3


    【解决方案1】:

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

    虽然您使用LEFT JOIN 加入描述,但您的WHERE 条件正在使用表oc_product_description 的列,这相当于将其转换为INNER JOIN,因为所有产品的结果如果没有匹配的描述,language_id 将具有 NULL 值,因此条件 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)'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2022-08-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多