目前一個項目,我需要從同一列多行不同的條件Mysql的過濾器
CREATE TABLE IF NOT EXISTS `spec_property` (
`sp_id` int(11) unsigned NOT NULL,
`spm_id` int(11) unsigned NOT NULL,
`spec_value` varchar(255) NOT NULL,
`spec_last_value` varchar(55) DEFAULT NULL,
`product_id` int(11) unsigned NOT NULL,
`spec_order_by` tinyint(2) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;
ALTER TABLE `spec_property`
ADD PRIMARY KEY (`sp_id`), ADD KEY `product_id` (`product_id`), ADD KEY `spec_value` (`spec_value`);
ALTER TABLE `spec_property`
MODIFY `sp_id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=75;
INSERT INTO `spec_property` (`sp_id`, `spm_id`, `spec_value`, `spec_last_value`, `product_id`, `spec_order_by`) VALUES
(31, 23, 'Octa Core', NULL, 4, NULL),
(34, 26, '2048', 'MB', 4, NULL),
(35, 27, '8192', 'MB', 4, NULL),
(36, 28, '2048', 'MB', 4, NULL),
(69, 62, 'Android', NULL, 4, NULL),
(70, 63, '5', NULL, 4, NULL),
(71, 65, 'Yes', NULL, 4, NULL),
(72, 66, 'Yes', NULL, 4, NULL),
(73, 67, '32000', NULL, 4, NULL),
(74, 68, '25', 'fps', 4, NULL);CREATE TABLE IF NOT EXISTS `spec_property` (
`sp_id` int(11) unsigned NOT NULL,
`spm_id` int(11) unsigned NOT NULL,
`spec_value` varchar(255) NOT NULL,
`spec_last_value` varchar(55) DEFAULT NULL,
`product_id` int(11) unsigned NOT NULL,
`spec_order_by` tinyint(2) unsigned DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=77 ;
ALTER TABLE `spec_property`
ADD PRIMARY KEY (`sp_id`), ADD KEY `product_id` (`product_id`), ADD KEY `spec_value` (`spec_value`);
ALTER TABLE `spec_property`
MODIFY `sp_id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=75;
INSERT INTO `spec_property` (`sp_id`, `spm_id`, `spec_value`, `spec_last_value`, `product_id`, `spec_order_by`) VALUES
(31, 23, 'Octa Core', NULL, 4, NULL),
(34, 26, '2048', 'MB', 4, NULL),
(35, 27, '8192', 'MB', 4, NULL),
(36, 28, '2048', 'MB', 4, NULL),
(69, 62, 'Android', NULL, 4, NULL),
(70, 63, '5', NULL, 4, NULL),
(71, 65, 'Yes', NULL, 4, NULL),
(72, 66, 'Yes', NULL, 4, NULL),
(73, 67, '32000', NULL, 4, NULL),
(74, 68, '25', 'fps', 4, NULL);
http://sqlfiddle.com/#!9/95329/3
SELECT distinct(product_id)
FROM `spec_property`
WHERE (spm_id = '62' AND spec_value IN ('Android' , 'Windows'))
AND (spm_id = '27' AND spec_value BETWEEN 4096 AND 131072)
過濾唯一的產品ID的工作。如果我使用'OR'條件我可以得到這個結果:
(http://sqlfiddle.com/#!9/95329/1)。其實我需要從spec_property找到產品ID的這是比賽就像
過濾選項中選擇不同的(產品),其中spm_id_62 IN ( '安卓', '窗口')和spm_id_27 BETWEEN 4096 AND 131072
我想如果你在上面的查詢中使用'OR',你只會得到不同的product_id 4。 – Sathish
嘿,Jacky,正如你在使用OR語句時所提到的,你可以同時獲得Android/Windows,62值和27值。您的原始查詢沒有意義,因爲它要求有衝突的值(即spm_id = 62&spm_id = 27)。目前還不清楚你真的需要什麼,你能否詳細說明一下? 你會得到只是4的id,因爲你問了不同的id(他們都是4的) –
請參閱http://stackoverflow.com/questions/33813037/manipulate-rows-using-multiple-clauses-in-mysql – JRD