Приобретая детали продукта


У меня есть эти таблицы MySQL:

-- Create product table
CREATE TABLE `product` (
  `product_id`       int            NOT NULL auto_increment,
  `price`            decimal(10,2)  NOT NULL default '0.00',
  `discounted_price` decimal(10,2)  NOT NULL default '0.00',
  `avail`            enum('Y','N')  NOT NULL default 'Y',
  `image`            varchar(150)   NOT NULL default '',
  `image_2`          varchar(150)   NOT NULL default '',
  `thumbnail`        varchar(150)   NOT NULL default '',
  `thumbnail_2`      varchar(150)   NOT NULL default '',
  `for_sale`         enum('Y','N')  NOT NULL default 'Y',
  `views_stats`      int            NOT NULL default '0',
  `sales_stats`      int            NOT NULL default '0',
  `amount_stats`     decimal(12,2)  NOT NULL default '0.00',
  PRIMARY KEY  (`product_id`),
  KEY `idx_avail` (`avail`),  
  KEY `idx_for_sale` (`for_sale`)
) ENGINE=MyISAM default charSET=utf8 COLLATE=utf8_unicode_ci;

-- Create table for product languages
CREATE TABLE `product_languages` (
  `language_id_iso_639_1` char(2)       NOT NULL default '',
  `product_id`            int           NOT NULL auto_increment,
  `name`                  varchar(100)  NOT NULL default '',
  `description`           varchar(1000) NOT NULL default '',
  `keywords`              varchar(255)  NOT NULL default '',
  `meta_description`      text          NOT NULL,
  `meta_keywords`         text          NOT NULL,
  `title_tag`             text          NOT NULL,
  PRIMARY KEY  (`language_id_iso_639_1`, `product_id`),
  FULLTEXT KEY `idx_ft_product_name_description` (`name`, `description`, `keywords`)
) ENGINE=MyISAM DEFAULT charSET=utf8 COLLATE=utf8_unicode_ci;

-- Create product_category table 'many to many relationship' between products and categories
    CREATE TABLE `product_category` (
      `product_id`  int NOT NULL default '0',
      `category_id` int NOT NULL default '0',
      PRIMARY KEY (`product_id`, `category_id`)
    ) 
ENGINE=MyISAM default charSET=utf8 COLLATE=utf8_unicode_ci;

Тогда я стараюсь, чтобы получить все продукты из таблицы продукт с продуктом детали на английском языке из таблицы product_languages, и из определенной категории, глядя на product_category стол и где толку от таблицы продукта составляет г, что-то вроде этого:

SELECT 
      product.product_id,
      product.price,
      product.discounted_price,
      product.avail,
      product.image,
      product.image_2,
      product.thumbnail,
      product.thumbnail_2,
      product.for_sale,
      product.views_stats,
      product.sales_stats,
      product.amount_stats,
      product_languages.name, 
      product_languages.description, 
      product_languages.keywords, 
      product_languages.meta_description, 
      product_languages.meta_keywords, 
      product_languages.title_tag
      FROM product
      INNER JOIN product_category
                   ON product.product_id = product_category.product_id
      INNER JOIN product_languages
                   ON product.product_id = product_languages.product_id
      WHERE product_category.category_id = 1
                   AND product.avail = 'Y'
                   AND product_languages.language_id_iso_639_1 = 'en'
      ORDER BY product.product_id
      LIMIT 0 , 30;

Это работает (я пробовал с phpmyadmin). Я получаю все продукты из таблицы Product, которые принадлежат к определенной категории, что безрезультатно='Y' и я вам названия и описания у каждого товара на английском (En) от product_languages стол.

Может кто-нибудь с опытом работы с MySQL предложить какие-либо изменения? Я не совсем уверен, если то, что я делаю правильно. Я должен менять таблиц, полей и типы для лучшего варианты, такие как перечисления, или удалить или добавить улучшение показателей, чтобы улучшить скорость?

Например, возможно добавить еще один индекс по product_id от product_languages стол, потому что теперь у меня есть первичный ключ ('language_id_iso_639_1', 'product_id') и я использую для второго внутреннего соединения продукта.product_id = product_languages.product_id, это правильно полнотекстовый ключ в product_languages таблицы полнотекстового ключа 'idx_ft_product_name_description' ('название', 'описание', 'Ключевые слова') , чтобы использовать эту функцию, чтобы посмотреть на этих 3-х полей, изменение части запроса с внутренними объединениями изменить порядок внутренние соединения внутреннее соединение таблицы product_languages первое и второе внутреннее соединение product_categoryи т. д.



310
1
задан 12 сентября 2011 в 01:09 Источник Поделиться
Комментарии
1 ответ

Я не специалист, как сказать, но мой только предложения могут быть:

1) в случае перечисления только когда-либо будет Г, Н, Вы можете взглянуть на изменения этих на битовый флаг.

2) я бы, пожалуй, посмотреть извлекать значения из полей, определенных как часть первичного ключа, т. е. product_category. Это вынудит значения, которые должны быть всегда поставляются с приложением.

3) product_languages.product_id. Я не понимаю здесь параметр типа AUTO_INCREMENT. Поле, кажется, хочет быть foreign_key на стол продукты, но вы установили его как поле типа AUTO_INCREMENT. Я бы, наверное, снять типа AUTO_INCREMENT и установить указатель на него.

1
ответ дан 12 сентября 2011 в 08:09 Источник Поделиться