通过拆分字段连接表

时间:2015-04-06 11:00:54

标签: mysql join split

我有两张桌子; - Items表 - 包含有关产品的基本信息:名称,产品的基本价格以及产品是否具有任何属性 - 它们将按以下格式指定:属性的选项ID - 属性的值ID。 (选项的示例将是颜色或大小,值的示例将是红色)。 例如:

项目表

id  | name  |attributes |price
1   |   a   |13-49      | 5.00
2   |   b   |5-101,13-77| 5.00
3   |   c   |           | 5.00
4   |   b   |5-102,13-70| 5.00
  • 第二个表具有分配给产品的每个选项和值(id_option和id_value - 与上一个表中的含义相同)以及属性值如何更改产品的基本价格(更改)以及更改内容的信息应该是(价值)。

items_attributes

id  |id_item|id_option|id_value |change | value  
1   |   1   |   13    | 49      |   1   |10.00
2   |   2   |   5     | 101     |   1   | 5.50
3   |   2   |   13    | 77      |   1   | 0.50
4   |   4   |   5     | 102     |   0   |    0
5   |   4   |   13    | 70      |   1   | 1.00

我希望得到一个表格与第一个相同,但是根据items_attributes表中记录的更改计算价格。

id  | name  |attributes | price
1   |   a   |13-49      | 15.00
2   |   b   |5-101,13-77| 11.00
3   |   c   |           |  5.00
4   |   b   |5-102,13-70|  6.00

如何从items表中拆分属性并使用它来连接两个表?

1 个答案:

答案 0 :(得分:0)

您可以使用find_in_set()

进行联接
select i.id, i.name, i.attributes,
       i.price + coalesce(sum(ia.value)) as price
from items i left join
     items_attributes ia
     on find_in_set(concat(ia.id_option, '-', ia.id_attribute), i.attributes) > 0
group by i.id;

不幸的是,您无法使用索引提高此查询的性能。为了获得更好的性能,您需要更好的数据结构。