Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zen cart:Chciałbym zapytać z określonej kategorii o nazwę produktu, cenę, zdjęcie, opis i atrybuty

Dzieje się tak, ponieważ nazwa_produktów i opis_produktów znajdują się w tabeli opis_produktów (a dokładniej w tabeli TABLE_PRODUCTS_DESCRIPTION), a nie w produktach tabeli (TABLE_PRODUCTS).

Aby uzyskać wszystkie podstawowe informacje (oprócz atrybutów) należy wykonać następujące zapytanie:

$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
    // let's get all attribues for product
    $productInfo = $q->fields;
    $qattr = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS_ATTRIBUTES . " WHERE products_id = " . (int)$q->fields['products_id']);
    $attr = array();
    while(!$qattr->EOF) {
        $attr[] = $qattr->fields;
        $qattr->MoveNext();
    }
    $productInfo['attributes'] = $attr;
    $items[] = $productInfo;
    $q->MoveNext();
}

// now let's output it
foreach($items as $item) {
    echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
    echo $items['products_price'] . '</p>';
}

Pamiętaj jednak, że ten kod NIE pobierz produkty z określonej kategorii - pobiera wszystkie produkty, nawet te, które są dezaktywowane. Istnieje kilka sposobów na zdobycie produktów z określonej kategorii, ale różnią się one wydajnością. Niestety nie ma na to najlepszego sposobu, ponieważ zależy to od danych. Jeśli produkty, które chcesz pobrać należą do kategorii o id_kategorii 5 i jest to ich kategoria podstawowa, wystarczy dodać do pierwszego zapytania "WHERE master_categories_id =5". Ale jeśli kategoria nie jest kategorią nadrzędną dla tych produktów, sprawy stają się nieco bardziej skomplikowane, ponieważ musimy uzyskać dostęp do tabeli products_to_categories, która powoduje spadek wydajności witryn z wieloma produktami. Jeśli nie wiesz/nie zależy Ci na wydajności możesz zmienić pierwsze zapytanie na:(zakładając, że znasz już category_id swojej kategorii):

$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);

Aby pozbyć się nieaktywnych produktów, wykonaj

$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id LEFT JOIN " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON(p.products_id = p2c.products_id AND p2c.categories_id = YOUR_CATEGORY_ID) WHERE products_status = 1 AND pd.products_id IS NOT NULL AND p2c.products_id IS NOT NULL AND language_id = " . (int)$_SESSION['languages_id']);

(Właściwie sprawdzenie pd.products_id IS NOT NULL nie jest potrzebne, ponieważ sprawdzamy już pd.language_id.)

EDYTUJ Wersja bez atrybutów

$q = $db->Execute("SELECT * FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_DESCRIPTION . " pd ON(p.products_id = pd.products_id) WHERE language_id = " . (int)$_SESSION['languages_id']);
$items = array();
while(!$q->EOF) {
    $items[] = $q->fields;
    $q->MoveNext();
}

// now let's output it
foreach($items as $item) {
    echo '<p><a href="index.php?main_page=product_info&products_id='. $item['products_id'] .'"><img src="images/'. $item['products_image'].'" alt="'. $item['products_name'].'" title="'. $items['products_name'].'" /></a>';
    echo $items['products_price'] . '</p>';
}



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Usuwanie zduplikowanych danych z tabeli za pomocą MySQL

  2. Zaktualizuj formularz za pomocą Ajax, PHP, MYSQL

  3. Błąd podczas instalacji mysqlclient dla Pythona na Ubuntu 18.04

  4. problem z kluczem obcym w jdbc

  5. Django views.py Wersja SQL Join z Multi Table Query