次のテーブルがあります。
Action_set
id_action_p1 | id_action_p2 | id_action_p3 | etc.
1 | 1 | 2
2 | 3 | 1
1 | 1 | 1
Action
id_action | id_type | value
1 | 0 | NULL
2 | 1 | NULL
3 | 2 | NULL
テーブルのどこid_action_p1/2/3
に、Action_set
テーブルの fks がid_action
ありAction
ます。
の行の ID ごとAction_set
に、それぞれの行を取得する必要がありますAction
。
たとえば、Action_set の最初の行を取得します。
(id_action_p1 | id_action_p2 | id_action_p3 )
1 | 1 | 2
結果として私に与える必要があります:
(id_type | value)
0 | NULL
0 | NULL
1 | NULL
私はmysqlに慣れていないので、どうすればいいのかわからない:(
編集:ここに私のテーブル ( id_lap を無視)
CREATE TABLE IF NOT EXISTS `Action` (
`id_action` int(11) NOT NULL AUTO_INCREMENT,
`value` int(11) DEFAULT NULL,
`id_type` tinyint(4) NOT NULL,
PRIMARY KEY (`id_action`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=7 ;
INSERT INTO `Action` (`id_action`, `value`, `id_type`) VALUES
(1, NULL, 0),
(2, NULL, 1),
(3, NULL, 2),
(4, NULL, 3),
(5, NULL, 4),
(6, NULL, 5);
CREATE TABLE IF NOT EXISTS `Action_set` (
`id_action_set` int(11) NOT NULL AUTO_INCREMENT,
`id_lap` int(11) NOT NULL,
`id_parent_action_set` int(11) DEFAULT NULL,
`id_action_pu` int(11) DEFAULT NULL,
`id_action_p1` int(11) DEFAULT NULL,
`id_action_p2` int(11) DEFAULT NULL,
`id_action_p3` int(11) DEFAULT NULL,
`id_action_p4` int(11) DEFAULT NULL,
`id_action_p5` int(11) DEFAULT NULL,
`id_action_p6` int(11) DEFAULT NULL,
`id_action_p7` int(11) DEFAULT NULL,
`id_action_p8` int(11) DEFAULT NULL,
`id_stage` tinyint(4) NOT NULL,
PRIMARY KEY (`id_action_set`),
KEY `fk_Action_set_Lap` (`id_lap`),
KEY `fk_Action_set_Action_set1` (`id_parent_action_set`),
KEY `fk_pu` (`id_action_pu`),
KEY `fk_p1` (`id_action_p1`),
KEY `fk_p2` (`id_action_p2`),
KEY `fk_p3` (`id_action_p3`),
KEY `fk_p4` (`id_action_p4`),
KEY `fk_p5` (`id_action_p5`),
KEY `fk_p6` (`id_action_p6`),
KEY `fk_p7` (`id_action_p7`),
KEY `fk_p8` (`id_action_p8`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=11;
INSERT INTO `Action_set` (`id_action_set`, `id_lap`, `id_parent_action_set`, `id_action_pu`, `id_action_p1`, `id_action_p2`, `id_action_p3`, `id_action_p4`, `id_action_p5`, `id_action_p6`, `id_action_p7`, `id_action_p8`, `id_stage`) VALUES
(1, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 2, 2, 2, 0),
(2, 1, 1, 1, 1, 1, 1, 2, 1, NULL, NULL, NULL, 0),
(3, 1, 2, NULL, NULL, NULL, NULL, NULL, NULL, 4, 4, 4, 1),
(4, 1, 3, NULL, NULL, NULL, NULL, 4, NULL, NULL, NULL, NULL, 1),
(5, 1, 4, NULL, NULL, NULL, NULL, NULL, NULL, 3, 1, 1, 2),
(6, 1, 5, NULL, NULL, NULL, NULL, 1, NULL, NULL, NULL, NULL, 2),
(7, 1, 1, 2, 1, 2, 1, 1, 1, NULL, NULL, NULL, 0),
(8, 1, 7, NULL, NULL, NULL, NULL, NULL, NULL, 4, 4, 4, 1),
(9, 1, 8, 4, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, 1),
(10, 1, 9, NULL, NULL, NULL, NULL, NULL, NULL, 1, 1, 1, 2);
編集 2
こんにちは、私はこの解決策を見つけました。これは期待どおりに返されます:
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p1 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p2 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p3 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p4 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p5 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p6 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p7 AND id_action_set = 1
UNION ALL
SELECT id_type, value FROM Action, Action_set WHERE id_action = id_action_p8 AND id_action_set = 1
それを最適化する方法はありますか?