sql >> Databasteknik >  >> RDS >> Mysql

Zen-vagn:Jag skulle vilja fråga från en specifik kategori dess produktnamn, pris, bild, beskrivning och attribut

Det beror på att products_name och products_description finns i tabellen products_description (eller för att vara mer specifik i TABLE_PRODUCTS_DESCRIPTION), inte i tabellprodukter (TABLE_PRODUCTS).

För att få all grundläggande information (förutom attribut) bör du utföra följande fråga:

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

Observera dock att den här koden INTE gör det få produkter från specifik kategori - den får alla produkter, även de som är inaktiverade. Det finns flera sätt att få produkter från en viss kategori, men de varierar i prestanda. Tyvärr finns det inget bästa sättet att göra detta eftersom det beror på data. Om produkterna du vill hämta tillhör kategori med kategoris_id på 5 och det är deras primära kategori räcker det med att lägga till i den första frågan "WHERE master_categories_id =5". Men om kategorin inte är huvudkategorin för dessa produkter blir saker och ting lite mer komplicerade eftersom vi måste komma åt tabellen products_to_categories som orsakar prestandaträffar för webbplatser med många produkter. Om du inte vet/inte bryr dig om prestanda så mycket kan du ändra den första frågan till:(förutsatt att du redan känner till categories_id för din kategori):

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

Kör

för att bli av med inaktiva produkter
$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']);

(Faktiskt kontrollera pd.products_id IS NOT NULL behövs inte eftersom vi redan kontrollerar pd.language_id.)

EDIT Version utan attribut

$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. Oracle-certifieringar

  2. Innebär en Postgres UNIQUE begränsning ett index?

  3. Ska jag använda backticks eller inte när jag undslipper sökord i MySQL?

  4. Ska jag offra min innodb_buufer_pool _size/RAM för att göra utrymme för query_cache_size?