sql >> Database teknologi >  >> RDS >> Mysql

Zen-vogn:Jeg vil gerne forespørge fra en bestemt kategori dens produktnavn, pris, billede, beskrivelse og attributter

Det skyldes, at products_name og products_description er i tabellen products_description (eller for at være mere specifik i TABLE_PRODUCTS_DESCRIPTION), ikke i tabelprodukter (TABLE_PRODUCTS).

For at få alle grundlæggende oplysninger (undtagen attributter) skal du udføre følgende forespørgsel:

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

Bemærk dog, at denne kode IKKE gør få produkter fra specifik kategori - den får alle produkter, også dem der er deaktiveret. Der er flere måder at få produkter fra en bestemt kategori på, men de varierer i ydeevne. Desværre er der ingen bedste måde at gøre dette på, fordi det afhænger af dataene. Hvis de produkter, du ønsker at hente, tilhører kategori med kategorier_id på 5, og det er deres primære kategori, er det nok at tilføje til den første forespørgsel "HVOR master_kategorier_id =5". Men hvis kategorien ikke er hovedkategorien for disse produkter, bliver tingene lidt mere komplicerede, fordi vi skal have adgang til tabellen products_to_categories, som forårsager præstationshit for websteder med mange produkter. Hvis du ikke ved eller er ligeglad med ydeevnen så meget, kan du ændre den første forespørgsel til:(forudsat at du allerede kender categories_id for 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']);

For at slippe af med inaktive produkter udfør

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

(Faktisk tjek pd.products_id IS NOT NULL er ikke nødvendigt, fordi vi allerede tjekker pd.language_id.)

EDIT Version uden attributter

$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. MySQL:Få seneste besked fra 2 tabeller, der er forbundet med hinanden

  2. Sammensat primær nøgle versus yderligere id-kolonne?

  3. PostgreSQL-indeks på JSON

  4. mySQL>> Tilføjelse af HREF-links til en Distinct GROUP_CONCAT