一尘不染

需要一个MySQL查询来从存储键值对的表中选择

mysql

我需要以键值对的形式在数据库(mySQL)中存储一些项目及其属性。我正计划如下。

我将使用两个表itemsitem_properties

items

itemId | 项目名称
-------------------
 1923年| 交流电
 1235 | 冰箱
 8273 | 电暖器

item_properties

itemId | 物业| 值
--------------------------------
 1923年| 效果| 冷却
 1923年| 消费 有效率的
 1923年| 类型 分裂
 1235 | 效果| 冷却
 1235 | 数量 20升
 8273 | 效果| 加热
 8273 | 消费 有效率的
 8273 | heatMethod | 线圈

现在,如果我必须选择“效果”为“冷却”的项目,则可以使用以下查询进行操作(结果将为我提供“ AC”和“冰箱”)。

从项目i,item_properties p中选择itemName 
在哪里i.itemId = p.itemId 
AND(p.property ='effect'AND p.value ='cooling');

我想知道如何编写查询以选择与多个属性匹配的项目,例如

  • 选择“效果”为“冷却”且“消耗”为“有效”的所有项目(与“ AC”项目匹配)。
  • 选择所有“类型”为“ split”或“ heatMethod”为“ coil”或“ consumption”为“ effecient”的物品(将与“ AC”和“ Heater”物品匹配)。

请帮助…预先感谢!


阅读 493

收藏
2020-05-17

共1个答案

一尘不染

这是查询示例:

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,而不是ANDWHERE

2020-05-17