【发布时间】:2021-07-29 21:40:08
【问题描述】:
我正在尝试构建产品比较页面。我有以下 MySQL 表。将 item_id 列视为 product_id
+---------+------------------+-------------------------+
| item_id | field_name | field_value |
+---------+------------------+-------------------------+
| 1 | Operating System | Windows 7 |
| 1 | Processor | Core i3 |
| 1 | Brand | HP |
| 2 | Operating System | Windows 10 |
| 2 | Processor | Core i7 |
| 2 | Brand | Dell |
+---------+------------------+-------------------------+
我试图获得一个结果,我可以将 item1 (item_id=1) 和 item2 (item_id=2) 的品牌、操作系统和处理器的值作为单行并排比较。要比较的产品数量(即:- 列)最少两个,最多四个。
我已经看到在这里找到的答案 -> MySQL pivot row into dynamic number of columns 但不同之处在于我的动态列基于 item_id 的值,而 field_name 值将用于一列。 field_value 的值将根据 item_id 添加到动态列中。根据答案,我尝试了以下基于案例的语句,但它创建了一些不必要的空值
SELECT
field_name,
CASE
WHEN price_fid = 1 THEN field_value
END AS item1,
CASE
WHEN price_fid = 2 THEN field_value
END AS item2
FROM
custom_fields;
结果:
+------------------+-----------+-------------------------+
| field_name | item1 | item2 |
+------------------+-----------+-------------------------+
| Operating System | Windows 7 | NULL |
| Processor | Core i3 | NULL |
| Brand | HP | NULL |
| Operating System | NULL | Windows 10 |
| Processor | NULL | Core i7 |
| Brand | NULL | Dell |
+------------------+-----------+-------------------------+
如您所见,品牌、操作系统和处理器在 field_name 列中出现两次,并且 item1 和 item2 都有空值。 我还查看了以下答案 -> Pivot values on column based on grouped columns in SQL 但仍然存在空值或重复字段名称的问题。
我想要获得的是单行上两个项目(产品)的值。这是我正在寻找的结果。
+------------------+-----------+------------+
| field_name | item1 | item2 |
+------------------+-----------+------------+
| Brand | HP | Dell |
| Operating System | Windows 7 | Windows 10 |
| Processor | Core i3 | Core i7 |
+------------------+-----------+------------+
是否可以运行 MySQL 查询来获得上述输出?如果是这样,有没有办法轻松添加第三个和第四个 item_id (即:- 列)。 我正在寻找一个基于案例或其他类型的查询,我可以轻松地从 PHP 调用。如果不能通过标准的 mysql 查询,我仍然不介意 t-sql 语句或过程。 谢谢
【问题讨论】:
-
为什么不处理应用程序代码中的表示问题?
标签: mysql