2017-11-05 1 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이 작업을 잘하지만, 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과 다릅니다.

일치하는 설명없이 모든 제품에 대한 결과가있을 것이기 때문에 당신이 당신의 WHERE 상태가 INNER JOIN로 변환하는 것과이 테이블 oc_product_description의 열을 사용 설명에 합류하기위한 LEFT JOIN를 사용하고 있지만 NULL 값이 language_id이므로 WHERE pd.language_id = 1 조건은 항상 false입니다.

확인하여 설명 테이블의 내용도 당신은 설명없이 제품도 결과를 반환하기 위해이 방법으로 쿼리를 다시 작성할 수 있습니다 : 우리는 그래서 경우 LEFT JOIN에 조건을 이동하기 때문에

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 

이 작동 조건이 실패하면 조인에만 영향을줍니다.

제품 테이블에 기본 설명이있는 열이있는 경우 '(no description found)' 대신 해당 열을 사용할 수 있습니다.

관련 문제