我有它定义了哪些东西另一个表可以有,例如表:复杂SELECT查询
CREATE TABLE `objects` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL
);
INSERT INTO `objects` (`name`) VALUES ('Test');
INSERT INTO `objects` (`name`) VALUES ('Test 2');
CREATE TABLE `properties` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(50) NOT NULL
);
INSERT INTO `properties` (`name`) VALUES ('colour');
INSERT INTO `properties` (`name`) VALUES ('size');
CREATE TABLE `objects_properties` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`object_id` INT UNSIGNED NOT NULL,
`property_id` INT UNSIGNED NOT NULL,
`value` VARCHAR(50) NOT NULL,
FOREIGN KEY (`object_id`)
REFERENCES `objects` (`id`),
FOREIGN KEY (`property_id`)
REFERENCES `properties` (`id`)
);
INSERT INTO `objects_properties` (`object_id`, `property_id`, `value`) VALUES 1, 1, 'red');
INSERT INTO `objects_properties` (`object_id`, `property_id`, `value`) VALUES 1, 2, 'small');
INSERT INTO `objects_properties` (`object_id`, `property_id`, `value`) VALUES 2, 1, 'blue');
INSERT INTO `objects_properties` (`object_id`, `property_id`, `value`) VALUES 2, 2, 'large');
希望这是有道理的。基本上,而不是在对象表中有颜色,大小等列,我有两个其他表,其中一个定义任何对象可以具有的属性,另一个表将对象链接到一些或所有这些属性。
我的问题是,如果有一些方法来获取这些信息是这样的:
+--------+------------+------------+ | object | colour | size | +--------+------------+------------+ | Test | red | small | | Test 2 | blue | large | +--------+------------+------------+
所以你可以看到的列标题实际上行值。我不确定是否可能,或者相比于做一些单独的查询并将所有内容整合到PHP中的代价是多么昂贵。
第三个别名应该是s。 – recursive 2009-11-09 14:17:30
固定,谢谢。 – manji 2009-11-09 15:09:01
我认为这不太对。 'c.colour'总是'color',因为它指的是属性名'p.name',但是我可以看到如何调整它以显示op.value' – Rob 2009-11-10 14:12:55