ビルドするselectクエリがあり、正しく機能させることができません。私は、より高度なMySQL開発者からのいくつかの提案を期待していました。だから私のテーブルは:
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は、アイテムグループの値から取得されます。アイテムは、製品のように、私のプロジェクトの主要なエンティティです。
- 各行は、itemsとgroup_valuesの間の関係を保持します。例:赤い色のアイテム。
- gv_id(igv.gv_id = gv.id)によってgvテーブルにリンクされています。
itemsはitemsから来ています:)この例では、item_idという1つの列のみに簡略化しています。
クエリする必要があるもの:
さて、私のアプリでは、選択したアイテム(my_item)があります(0個以上のグループ値が添付されています)。まったく同じgroup_valuesが定義されているか、my_itemグループに値が指定されていないすべてのアイテムが必要です。PHPでは、アタッチされているすべてのグループをIDを持つ配列として抽出でき、すべてのgroup_valuesも抽出できます。しかし、このデータベースから必要なものを選択する方法が見つかりませんでした。この膨大な時間のかかる選択に提供されたあらゆる入力に感謝します。
ありがとう!
短いスケッチアップの例。左側には、すべての右側のアイテムに一致するアイテムがあります(コンマで区切られています)。