我有两张桌子; - 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
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表中拆分属性并使用它来连接两个表?
答案 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;
不幸的是,您无法使用索引提高此查询的性能。为了获得更好的性能,您需要更好的数据结构。