Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zen-Wagen:Ich möchte aus einer bestimmten Kategorie den Produktnamen, den Preis, das Bild, die Beschreibung und die Attribute abfragen

Das liegt daran, dass products_name und products_description in der Tabelle products_description (oder genauer gesagt in TABLE_PRODUCTS_DESCRIPTION) enthalten sind, nicht in der Tabelle products (TABLE_PRODUCTS).

Um alle grundlegenden Informationen (außer Attribute) zu erhalten, sollten Sie die folgende Abfrage ausführen:

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

Beachten Sie jedoch, dass dieser Code NICHT funktioniert Produkte aus einer bestimmten Kategorie abrufen - Es werden alle Produkte abgerufen, auch diejenigen, die deaktiviert sind. Es gibt mehrere Möglichkeiten, Produkte aus einer bestimmten Kategorie zu erhalten, aber sie unterscheiden sich in der Leistung. Leider gibt es dafür keine beste Möglichkeit, da dies von den Daten abhängt. Wenn die Produkte, die Sie abrufen möchten, zu einer Kategorie mit der category_id von 5 gehören und es sich um ihre primäre Kategorie handelt, reicht es aus, der ersten Abfrage "WHERE master_categories_id =5" hinzuzufügen. Aber wenn die Kategorie nicht die Hauptkategorie für diese Produkte ist, werden die Dinge etwas komplizierter, weil wir auf die Tabelle products_to_categories zugreifen müssen, was bei Websites mit vielen Produkten zu Leistungseinbußen führt. Wenn Sie die Leistung nicht so sehr kennen/interessieren, können Sie die erste Abfrage ändern in:(vorausgesetzt, Sie kennen bereits die category_id Ihrer 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']);

Um inaktive Produkte loszuwerden, führen Sie

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

(Die Prüfung auf pd.products_id IS NOT NULL ist nicht erforderlich, da wir bereits pd.language_id prüfen.)

EDIT Version ohne Attribute

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