0

現在、クエリに問題があり、それを機能させるための最終ステップがわかりません。問題は、私の Web サイトにフィルター オプションがあり、訪問者が特定の設定でフィルター処理できるようになっていることです。

これまでの私のクエリは

SELECT DISTINCT `spt`.`title`
FROM `shop_product_specs` as `sps` JOIN
     `shop_product_texts` as `spt`
     ON `spt`.`product_id` = `sps`.`product_id`
WHERE `cat_spec_id` IN (2, 3) AND (`value` IN ("1200", "1400")) AND (`value` IN ("A", "A+"))

私が達成しようとしているのは、クエリを実行すると、値フィールドが複数の値と一致することです。

したがって、たとえば、cat_spec_id が 2 で値が 1200 または 1400 の製品が必要ですが、cat_spec_id が 3 で値が「A」または「A+」である製品も必要です。

クエリの主な問題は、それが同じフィールドであることです。これは可能ですか?

これが私の構造です

CREATE TABLE IF NOT EXISTS `shop_product_specs` (
  `product_spec_id` int(11) NOT NULL AUTO_INCREMENT,
  `product_id` int(11) NOT NULL,
  `cat_spec_id` int(11) NOT NULL,
  `value` varchar(50) NOT NULL,
  PRIMARY KEY (`product_spec_id`),
  KEY `product_id` (`product_id`),
  KEY `cat_spec_id` (`cat_spec_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=312 ;
4

1 に答える 1

0

これは set-within-sets サブクエリの例だと思います。これを集計とhaving句で解決する方法を次に示します。

SELECT  `spt`.`title`
FROM `shop_product_specs` as `sps` JOIN
     `shop_product_texts` as `spt`
     ON `spt`.`product_id` = `sps`.`product_id`
group by spt.title
having max(cat_spec_id = 2 and value in ('1200', '1400')) > 0 and
       max(cat_spec_id = 3 and value in ('A', 'A+')) > 0

句の各条件はhaving、対応する条件を持つ行が存在することを確認しています。

于 2013-06-18T21:06:11.533 に答える