Mysql
 sql >> база данни >  >> RDS >> Mysql

Дзен количка:Бих искал да потърся от конкретна категория нейното име на продукти, цена, изображение, описание и атрибути

Това е така, защото 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>';
}

Имайте предвид обаче, че този код НЕ вземете продукти от конкретна категория - получава всички продукти, дори тези, които са деактивирани. Има няколко начина да получите продукти от конкретна категория, но те се различават по производителност. За съжаление няма най-добрия начин да направите това, защото зависи от данните. Ако продуктите, които искате да извлечете, принадлежат към категория с идентификатор на категориите от 5 и това е основната им категория, достатъчно е да добавите към първата заявка „КЪДЕ master_categories_id =5“. Но ако категорията не е главна категория за тези продукти, нещата стават малко по-сложни, защото трябва да имаме достъп до таблицата products_to_categories, която причинява удар на производителността за сайтове с много продукти. Ако не знаете/не ви пука за ефективността, можете да промените първата заявка на:(ако приемем, че вече знаете category_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 IS NOT NULL не е необходима, защото вече проверяваме 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да накарам MySQL да използва INDEX за заявка за преглед?

  2. CASE производителност в MySQL?

  3. PHP MySQL зададе времето за изчакване на връзката

  4. Как да намерите дублиращи се записи в MySQL

  5. PHP Предупреждение:Стартиране на PHP:Не може да се зареди динамична библиотека 'pdo_mysql.so'