我有它定義了哪些東西另一個表可以有,例如表:複雜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