sql >> Database >  >> RDS >> Mysql

Zen-wagentje:ik wil graag een zoekopdracht uit een specifieke categorie voor de naam, prijs, afbeelding, beschrijving en kenmerken van het product

Dat komt omdat products_name en products_description in tabel products_description staan ​​(of om specifieker te zijn in TABLE_PRODUCTS_DESCRIPTION), niet in tabelproducten (TABLE_PRODUCTS).

Om alle basisinformatie (behalve attributen) te krijgen, moet u de volgende query uitvoeren:

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

Merk echter op dat deze code NIET . doet krijg producten uit een specifieke categorie - het krijgt alle producten, zelfs die zijn gedeactiveerd. Er zijn verschillende manieren om producten uit een specifieke categorie te krijgen, maar ze variëren in prestaties. Helaas is er geen beste manier om dit te doen, omdat dit afhankelijk is van de gegevens. Als de producten die u wilt ophalen behoren tot een categorie met categorieën_id van 5 en het is hun primaire categorie, dan is het voldoende om toe te voegen aan de eerste zoekopdracht "WHERE master_categories_id =5". Maar als de categorie geen hoofdcategorie is voor die producten, wordt het een beetje ingewikkelder omdat we toegang moeten hebben tot de tabel products_to_categories, wat leidt tot prestatieverlies voor sites met veel producten. Als u de prestaties niet zo goed kent/geeft, kunt u de eerste zoekopdracht wijzigen in:(ervan uitgaande dat u de categorieën_id van uw categorie al kent):

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

Voer

. uit om inactieve producten te verwijderen
$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']);

(Eigenlijk controleren op pd.products_id IS NOT NULL is niet nodig omdat we pd.language_id al controleren.)

BEWERK Versie zonder attributen

$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. 2 manieren om de dag uit een datum te halen in Oracle

  2. .nextval JDBC invoegprobleem

  3. Wat is de juiste manier om code te testen die intern MySQL-specifieke queries gebruikt?

  4. SQL Server Hoge beschikbaarheid:SQL Server failover geclusterd exemplaar installeren, deel 2