sql >> Databáze >  >> RDS >> Mysql

Zen cart:Chtěl bych se zeptat z konkrétní kategorie na název produktu, cenu, obrázek, popis a atributy

Je to proto, že product_name a products_description jsou v tabulce product_description (nebo přesněji v TABLE_PRODUCTS_DESCRIPTION), nikoli v tabulce products (TABLE_PRODUCTS).

Pro získání všech základních informací (kromě atributů) byste měli provést následující dotaz:

$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>';
}

Upozorňujeme však, že tento kód NE získat produkty z konkrétní kategorie – získá všechny produkty, i ty, které jsou deaktivovány. Existuje několik způsobů, jak získat produkty z konkrétní kategorie, ale liší se výkonem. Bohužel neexistuje nejlepší způsob, jak to udělat, protože to závisí na datech. Pokud produkty, které chcete načíst, patří do kategorie s category_id 5 a je to jejich primární kategorie, stačí k prvnímu dotazu přidat "WHERE master_categories_id =5". Ale pokud kategorie není hlavní kategorií pro tyto produkty, věci se trochu zkomplikují, protože potřebujeme přístup k tabulce products_to_categories, která způsobuje snížení výkonu u stránek s mnoha produkty. Pokud nevíte/nezajímáte se o výkon, můžete změnit první dotaz na:(za předpokladu, že již znáte category_id své kategorie):

$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']);

Chcete-li se zbavit neaktivních produktů, spusťte

$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']);

(Ve skutečnosti není potřeba zkontrolovat pd.products_id IS NOT NULL, protože pd.language_id již kontrolujeme.)

UPRAVIT Verzi bez atributů

$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. Vyberte první řádek každé skupiny v sql

  2. MySQL SUM se stejným ID

  3. MariaDB JSON_TYPE() vysvětleno

  4. Jak používat aliasy v matematických operátorech v SQL?