2017-11-05 1 views
1

Ich habe diese Abfrage aber es ist noch keine Daten, die zeigen, ich bin immer leer Ergebnisse:Opencart 3 Produkte keine Daten mysql Abfrage holen nicht Produkte zeigen

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 

Ich denke, das Problem in der oc_product_description Tabelle (Feld Beschreibungen).

Ich versuche auch SELECT * FROM oc_product Dieses funktioniert gut, aber SELECT * FROM oc_product_description dies nicht funktioniert, SELECT name FROM oc_product_description dies funktioniert gut ...

Das ist mein voller Code

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

?> 

bitte helfen Sie mir jemand ... danke

Antwort

1

Das Problem scheint zu sein, dass Sie entweder keine passende Reihe für diese Produkte in oc_product_description haben oder dass die Beschreibungen Sie haben in dieser Tabelle für diese Produkte einen Wert in language_id anders von 1.

Obwohl Sie LEFT JOIN zum Verbinden der Beschreibung Ihrer WHERE verwenden Bedingung oc_product_description eine Spalte der Tabelle verwendet, die das Äquivalent von ihm einer INNER JOIN Umwandlung, da die Ergebnisse für alle Produkte ohne eine passende Beschreibung ein haben NULL Wert für language_id, so würde die Bedingung immer falsch sein.

Überprüfen Sie die Inhalte Ihrer Beschreibungstabelle, auch können Sie die Abfrage auf diese Weise umschreiben Ergebnisse zurückgeben auch für Produkte ohne Beschreibung:

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 

Dies funktioniert, weil wir die Bedingung für die LEFT JOIN so, wenn die bewegt Bedingung schlägt fehl, betrifft nur den Join.

Beachten Sie, dass Sie die Spalte anstelle von '(no description found)' verwenden können, wenn die Produkttabelle über eine Spalte mit einer Standardbeschreibung verfügt.

Verwandte Themen