2016-05-09 7 views
0

Ich brauche eine andere Tabelle in dieser Funktion mit einem Namen-Anbieter zu verbinden, ist das möglichLEFT JOIN 3 SQL-Tabellen OpenCart

public function getProducts($data = array()) { 
     $sql = "SELECT * FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "'"; 
+0

Ja. Es ist nur ein weiterer JOIN. Aber beachte, dass dein bestehendes JOIN eigentlich ein INNER JOIN ist! – Strawberry

+0

Kannst du es bitte mit Tabellennamen-Anbietern zeigen? – A0twa

Antwort

0
$sql = " 
    SELECT c.olumns, y.ou, a.ctually, w.ant 
    FROM product p 
    JOIN product_description pd 
     ON pd.product_id = p.product_id 
    JOIN vendors v 
     ON v.product_id = p.product_id 
    WHERE pd.language_id = ? 
    ORDER 
     BY p.product_id; 
    "; 

Jetzt über vorbereitete Anweisungen

0

Testen Sie diesen Code sehen.

if(!empty($productIds) && is_array($productIds)){ 
      $productIdstr = implode(",",$productIds); 
      $sql = "SELECT ".DB_PREFIX."product.product_id, $columns FROM " . DB_PREFIX . "product 
        join ".DB_PREFIX."product_description on ".DB_PREFIX."product.product_id=".DB_PREFIX."product_description.product_id"; 
        $sql .= "WHERE status=1 AND product_id in ('" . $productIdstr. "')"; 


     }else{ 
      $sql = "SELECT ".DB_PREFIX."product.product_id, $columns FROM " . DB_PREFIX . "product join ".DB_PREFIX."product_description on ".DB_PREFIX."product.product_id=".DB_PREFIX."product_description.product_id"; 
      } 
     if (!empty($data['filter_category'])) { 
      $sql .= " join ".DB_PREFIX."product_to_category on ".DB_PREFIX."product_to_category.product_id=".DB_PREFIX."product.product_id AND ".DB_PREFIX."product_to_category.category_id = '" . strtolower($this->db->escape($data['filter_category'])) . "'"; 
      $sql .="WHERE status=1 "; 
      } 

     if (!empty($data['filter_name'])) { 
      $sql .= " AND lower(name) LIKE '%" . strtolower($this->db->escape($data['filter_name'])) . "%'"; 
      } 
     if (!empty($data['filter_model'])) { 
      $sql .= " AND lower(model) LIKE '%" . strtolower($this->db->escape($data['filter_model'])) . "%'"; 
     } 

     if (!empty($data['filter_threshold'])) { 
     $sql .= " ORDER BY quantityalert"; 
      } 
      $sort_data = array(
     'name', 
     'model', 
     'price', 
     'quantity', 
        'quantityalert' 
        ); 
+1

Du solltest deinen Stückcode erklären. Lesen Sie [diese Anleitung] (https://stackoverflow.com/help/how-to-answer), um Ihre Antwort zu verbessern. :) – Markus