0

ストアのレポートを作成し、メーカー ID でカテゴリを取得しようとしています。MySQLクエリを実行するのは運が悪い(経験はほとんどゼロです)が、私はこれを持っています:

メーカー-商品-product_category-category-category_description

テーブル スキーマ

CREATE SCHEMA IF NOT EXISTS `table` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
USE `table` ;

-- -----------------------------------------------------
-- Table `table`.`category_description`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `table`.`category_description` (
  `category_id` INT(11) NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`category_id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `table`.`category`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `table`.`category` (
  `category_id` INT(11) NOT NULL AUTO_INCREMENT ,
  `image` VARCHAR(255) NULL ,
  PRIMARY KEY (`category_id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `table`.`manufacturer`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `table`.`manufacturer` (
  `manufacturer_id` INT(11) NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(64) NOT NULL DEFAULT '' ,
  PRIMARY KEY (`manufacturer_id`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `table`.`product`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `table`.`product` (
  `product_id` INT(11) NOT NULL AUTO_INCREMENT ,
  `manufacturer_id` INT(11) NOT NULL ,
  `name` VARCHAR(45) NULL ,
  PRIMARY KEY (`product_id`) ,
  INDEX `product_manufacturer` (`manufacturer_id` ASC) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `table`.`product_category`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `table`.`product_category` (
  `product_id` INT(11) NOT NULL ,
  `category_id` INT(11) NOT NULL ,
  PRIMARY KEY (`product_id`, `category_id`) ,
  INDEX `product_to_category_product_id` (`product_id` ASC) ,
  INDEX `product_to_category_category_id` (`category_id` ASC) )
ENGINE = InnoDB;

-- Sorry if example data is not provided

MySQL クエリ

SELECT category_description.name, category.category_id
FROM manufacturer
  JOIN product ON product.manufacturer_id = manufacturer.manufacturer_id
  JOIN product_to_category ON product_to_category.product_id = product.product_id
  JOIN category ON category.category_id = product_to_category.category_id
  JOIN category_description ON category_description.category_id = category.category_id
  WHERE manufacturer.manufacturer_id = 7

クエリ結果には多くのcategory_description.name繰り返し行があります(私の初心者クエリから継承されたと思います)

スキーマは製品に基づいており、メーカーが選択されると、その製品に関連するすべてのカテゴリが取得されます (一意)。

クエリの作成に関する知識が不足しているため在庫があります

編集:申し訳ありませんが、categoryテーブルの行名を修正しました(category.image代わりにcategory.name

4

1 に答える 1

1

どうぞ( sqlfiddle ):

SELECT DISTINCT category_description.name, category.category_id
FROM product
  JOIN product_category ON product_category.product_id = product.product_id
  JOIN category ON category.category_id = product_category.category_id
  JOIN category_description ON category_description.category_id = category.category_id
  WHERE product.manufacturer_id = 1

a) 不要なテーブルをリンクしない

b)DISTINCT断片化された、一度は区別されたデータ (つまり、ここでは製品) によって生成された重複をクリーンアップするために使用します。

c) テーブル名のスペルを間違えないでください:p

于 2012-12-10T06:04:42.377 に答える