sql >> データベース >  >> RDS >> Mysql

Zenカート:特定のカテゴリから、その製品名、価格、画像、説明、および属性を照会したい

    これは、products_nameとproducts_descriptionがテーブルproducts_description(または、より具体的にはTABLE_PRODUCTS_DESCRIPTION)にあり、テーブル製品(TABLE_PRODUCTS)にはないためです。

    すべての基本情報(属性を除く)を取得するには、次のクエリを実行する必要があります:

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

    ただし、このコードはないことに注意してください 特定のカテゴリから製品を取得します-非アクティブ化されている製品も含め、すべての製品を取得します。特定のカテゴリから製品を取得する方法はいくつかありますが、パフォーマンスは異なります。残念ながら、これはデータに依存するため、これを行うための最良の方法はありません。取得する製品がcategories_idが5のカテゴリに属し、それがプライマリカテゴリである場合は、最初のクエリ「WHERE master_categories_id=5」に追加するだけで十分です。ただし、カテゴリがこれらの製品のマスターカテゴリでない場合は、products_to_categoriesテーブルにアクセスする必要があるため、状況が少し複雑になります。これにより、多くの製品があるサイトでパフォーマンスが低下します。パフォーマンスがあまりわからない/気にしない場合は、最初のクエリを次のように変更できます:(カテゴリのcategories_idをすでに知っていると仮定):

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

    非アクティブな製品を取り除くには、実行します

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

    (実際には、pd.products_idをチェックする必要はありません。すでにpd.language_idをチェックしているためです。)

    属性なしのバージョンの編集

    $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. PostgreSQLクエリで変数を宣言する方法

    2. DelphiをSalesforce.comに接続する

    3. SQL Server(T-SQL)で文字列内の複数の文字を置き換える

    4. PostgreSQL:デフォルトの制約名