需要一个MySQL查询从存储键值对的表中进行选择
我需要在数据库(mySQL)中以键值对的形式存储少量项目及其属性。我打算如下进行。需要一个MySQL查询从存储键值对的表中进行选择
我将使用两个表items
和item_properties
。
items
itemId | itemName ------------------- 1923 | AC 1235 | Fridge 8273 | Heater
item_properties
itemId | property | value -------------------------------- 1923 | effect | cooling 1923 | consumption | efficient 1923 | type | split 1235 | effect | cooling 1235 | volume | 20 liters 8273 | effect | heating 8273 | consumption | efficient 8273 | heatMethod | coil
现在,如果我有选择项,它们的 '效果' 是 '冷却',我能做到这一点使用下面的查询(这会给我' AC'和'Fridge')。
SELECT itemName FROM items i, item_properties p WHERE i.itemId=p.itemId AND (p.property = 'effect' AND p.value ='cooling');
我想知道如何编写查询来选择匹配多个属性,如
- 的项目选择其“效果”是“冷”与“消费”的所有项目是“有效的”(这会匹配项目'AC')。
- 选择'type'为'split'或'heatMethod'为'coil'或OR'consumption'为'effecient'(可匹配项目“AC”和“Heater”)的所有项目。
请帮助...提前致谢!
下面是一个例子查询:
SELECT
itemName
FROM
items i,
JOIN
item_properties effect
ON i.itemId = effect.itemId AND effect.property = 'effect'
JOIN
item_properties consumption
ON i.itemId = consumption.itemId AND consumption.property = 'consumption'
WHERE effect.value = 'cooling' AND consumption.value = 'efficient';
我将离开oR
查询的东西,你可以尝试自己。这只是增加更多的表,并使用OR
而不是在WHERE
。
问候!
我想你的原始查询也许是不对的..如果你item_properties表中有一个名为列(的itemId,财产值),那么您的查询应该是:
SELECT i.itemName FROM items i, item_properties p
WHERE i.itemId=p.itemId AND p.property='cooling';
而且,你在做“隐加入“,而且我不知道你想学习多少SQL,而只是想让某些东西起作用,但还有另一种编写查询的方式,我认为如果你打算坚持,可能会更好与SQL数据库一段时间。这没什么大不了的,只是第二种形式更容易阅读。
原始查询:
SELECT itemName FROM items i, item_properties p
WHERE i.itemId=p.itemId AND p.property='cooling';
会使用连接语法被改写:
SELECT i.itemName FROM items i
JOIN item_properties p ON i.itemId=p.itemId WHERE p.property='cooling';
我会尽量回答你的问题,给这两种形式...
选择“效应”为“冷却”且“消耗”为“有效”(其将与“AC”匹配)的所有项目。
select itemName FROM items i, item_properties p
WHERE i.itemId=p.itemId AND (p.property='cooling' AND p.value='consumption');
select i.itemName FROM items i JOIN item_properties p ON i.itemId=p.itemId
WHERE p.property='cooling' AND p.value='consumption';
选择其“类型”是“分裂” OR“heatMethod”为“线圈” OR“消费”是“effecient”(这将匹配项的AC“和“加热器”)的所有项目。
select itemName FROM items i, item_properties p
WHERE i.itemId=p.itemId AND ((p.property='type' AND p.value='split') OR
(p.property='heatMethod' AND p.value='coil') OR
(p.property='consumption' AND p.value='efficient'));
select itemName FROM items i JOIN item_properties p ON i.itemId=p.itemId
WHERE (p.property='type' AND p.value='split') OR
(p.property='heatMethod' AND p.value='coil') OR
(p.property='consumption' AND p.value='efficient');
希望帮助!
好抓@extraplanetary。我编辑了我的问题来纠正我的查询。 – Goje87 2010-11-27 10:37:01
谢谢@WoLpH! :)爽脆简单... – Goje87 2010-11-27 10:35:29