Продукты Opencart 3 не получают данные MySQL запрос не показывает продукты

У меня есть этот запрос, но он не показывает никаких данных, я получаю пустые результаты:

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

Решение

Кажется, проблема в том, что у вас нет подходящей строки для этих продуктов в oc_product_description или что описания, которые вы имеете в этой таблице для этих продуктов, имеют значение в language_id отличается от 1,

Хотя вы используете LEFT JOIN для присоединения к описанию вашего WHERE условие использования столбца таблицы oc_product_description, что эквивалентно преобразованию его в INNER JOINпотому что результаты для всех продуктов без соответствующего описания будут иметь NULL значение для language_id, так что условие WHERE pd.language_id = 1 всегда будет ложным

Проверьте содержимое таблицы описания, также вы можете переписать запрос таким образом, чтобы получить результаты также для продуктов без описания:

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)',

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]