繁体   English   中英

mysql列名和字段值作为行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM