我有一个选择查询来建立,我不能得到它的工作propery。我希望从更先进的MySQL开发人员那里得到一些建议。 所以我的表是:Mysql select查询组concat
CREATE TABLE IF NOT EXISTS `gv` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`option_id` int(11) NOT NULL,
`group_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ;
INSERT INTO `gv` (`id`, `option_id`, `group_id`) VALUES
(1, 1, 1),
(2, 2, 2),
(3, 3, 2),
(4, 4, 3),
(5, 5, 4),
(6, 6, 4);
CREATE TABLE IF NOT EXISTS `igv` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`item_id` int(11) NOT NULL,
`gv_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=9 ;
INSERT INTO `igv` (`id`, `item_id`, `gv_id`) VALUES
(1, 1, 1),
(2, 1, 3),
(3, 2, 1),
(4, 2, 2),
(6, 3, 5),
(7, 4, 2),
(8, 2, 6);
CREATE TABLE IF NOT EXISTS `items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`item_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
INSERT INTO `items` (`item_id`) VALUES
(1),
(2),
(3),
(4),
(5);
现在我会解释这些表都在做:
GV来自group_values。一个组就像一个物品。例如:颜色。
- 每行都保存一个组的值。例如:组颜色(group_id)的红色(option_id)。
igv来自项目组值。项目是我项目中的主要实体,就像产品一样。
- 每行都包含项目和组值之间的关系。例如:红色的物品。
- 它通过gv_id(igv.gv_id = gv.id)链接到gv表。
项目来自项目:)我简化了这个例子只有一列,item_id。
我需要查询:
嗯,在我的应用我有一个选择的项目(my_item)(0或多个组值附后)。 我需要定义完全相同的group_values的所有项目,或者没有为my_item组指定值。在PHP中,我可以提取所有附加的组作为一个数组与id,也是所有group_values。但是我没有办法从这个数据库中选择我需要的东西。 我非常感谢提供给这个海量时间选择的任何输入。
谢谢!
一个简短的草绘示例。在左侧,我们有与所有正确项目匹配的项目(用逗号分隔)。
你能给一个工作的例子吗? – Neil
'SELECT i.item_id,igv.id,gv.option_id,gv.group_id FROM items AS i LEFT JOIN igv ON i.item_id = igv.item_id LEFT JOIN gv ON igv.gv_id = gv.id AND gv.group_id IN(1,2) WHERE IF(gv.group_id IS NOT NULL,gv.option_id IN(1,2),1) GROUP BY i.item_id' 但为此,我需要先处理所有提供的项目,提取附加的组和它们的值。这也没有完全测试到我的应用程序,只有在这个测试的例子。 –
对不起,但这并没有真正帮助我。我重读了你的问题,我假设你想将第2项与第4项匹配,因为它们对于2的group_id都有option_id 2,并且你不想将第2项与第3项匹配,因为它们具有不同的option_id group_id是4,但我不能告诉你是否想将项目2与项目1或项目5或两者匹配。 – Neil