[英]mysql column name and field value as row
我正在尝试提供使用sql查询的数据可视化程序。 为了创建饼图,它希望输入看起来如下:
+--+-----+-----+-----+
|SliceName|SliceValue
+--+-----+-----+-----+
|Slice 1 |1
+--+-----+-----+-----+
|Slice 2 |5
+--+-----+-----+-----+
我们的产品数据存储在这样的表中:
+--+-----+-----+-----+
|ProductID|Slice 1 | Slice 2
+--+-----+-----+-----+
|123 |1 |5
+--+-----+-----+-----+
其他产品将存储在其他行中。 我们需要使用ProductID检索这些行之一,然后创建类似于第一个示例中的表的sql输出。 我已经阅读了一些有关“旋转”的文章,但是我不确定这正是我们在这里需要做的。
谁能提供一些建议?
是否可以更改数据库模式(您有这样做的胃口)? 通过查看数据规范化和数据库内的关系可以解决您的问题。
我会将与切片有关的信息从“ 产品”表中取出,放到名为“ 切片”的新表中。
看一下这个SQL Fiddle示例。
您会看到我已经在Slices表中创建了FK:
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
ON DELETE CASCADE
ON UPDATE CASCADE
因此,如果您从“ 产品”表中删除一行,则“ 切片”表中与该ProductID
相关的数据也将被删除。 同样,如果您要更新Products表中的ProductID
,那么此更改也将级联到Slices表中。
现在,要以所需的格式获取数据,您可以使用ProductID
直接从Slices中进行SELECT
,或者使用基于INNER JOIN
的SQL语句基于Products表中的另一列进行SELECT
,例如
SELECT SliceName, SliceValue
FROM Slices s
INNER JOIN Products p ON s.ProductID = p.ProductID
WHERE ProductName = "widget"
像这样将切片存储在单独的表中会更有效并提供灵活性。 除非每个产品始终有固定数量的切片。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.