MySQL 查询以返回值为字段类型和标题的自定义结构

标签 mysql join

抱歉,这个奇怪的标题很难概括我想要实现的目标。我的目标是拥有一个通用的表结构来存储“任何”类型的数据,并使其...... self 描述,以获取自定义表作为查询的输出。

我有一个具有这种结构的表:

id (INT)
idItem (INT)
fieldTitle (VARCHAR)
field (VARCHAR)
value_label (VARCHAR)
value_text (TEXT)
value_bool (TINYINT)
value_int (INT)
value_float (FLOAT)

表格中的数据示例:

id  idItem  fieldTitle  field       value_label     value_text              value_bool  value_int   value_float
--------------------------------------------------------------------------------------------------------------
1   15      title       value_label My Product One  NULL                    NULL        NULL        NULL
2   15      description value_text  NULL            Very good product...    NULL        NULL        NULL
3   15      visible     value_bool  NULL            NULL                    1           NULL        NULL
4   15      price       value_float NULL            NULL                    NULL        NULL        19.9
5   16      title       value_label My Product Two  NULL                    NULL        NULL        NULL
6   16      description value_text  NULL            Just an hidden product. NULL        NULL        NULL
7   16      visible     value_bool  NULL            NULL                    0           NULL        NULL
8   16      price       value_float NULL            NULL                    NULL        NULL        30

我想结束这样的事情:

idItem (INT)
title  (VARCHAR)
description (TEXT)
visible (TINYINT)
price (FLOAT)

输出数据示例:

idItem  title           description             visible price
15      My Product One  Very good product...    1       19.9
16      My Product Two  Just an hidden product. 0       30

最佳答案

虽然我不同意这种模式(请参阅我在问题下方的评论),但您可以尝试一下:

select idItem,
  max(if(fieldTitle = 'title', value_label, null)) Title,
  max(if(fieldTitle = 'description', value_text, null)) Description,
  max(if(fieldTitle = 'visible', value_bool, null)) Visible,
  max(if(fieldTitle = 'price', value_float, null)) Price
from t
group by idItem

这导致:

+--------+----------------+-------------------------+---------+-------+
| IDITEM |     TITLE      |       DESCRIPTION       | VISIBLE | PRICE |
+--------+----------------+-------------------------+---------+-------+
|     15 | My_Product_One | Very_good_product...    |       1 | 19.9  |
|     16 | My_Product_Two | Just_an_hidden_product. |       0 | 30    |
+--------+----------------+-------------------------+---------+-------+

添加更多字段非常简单。如果您有任何问题,请告诉我。

关于MySQL 查询以返回值为字段类型和标题的自定义结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9647086/

相关文章:

mysql - 加速MySQL中的多维欧式距离计算

mysql - 您可以在主从 (MySQL) 上以不同方式索引表吗

javascript - 连接 map 每个元素中的第一个字母

mysql - 加入多个计数的mysql查询

r - 将 dplyr join 语法转换为纯 data.table 语法

c# - 如何从查询导入组合框中剪切字符串

php - 通过 php 提交框运行多个 Mysql 更新

mysql - 使用 SQL 选择年龄组

Php - 使用 join() 时我可以忽略/跳过空字符串吗

mysql - 选择选项数组作为 select 语句的一部分