我有一個選擇查詢來建立,我不能得到它的工作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