mysql - 如何从专用 'fields' 表中选择值?

标签 mysql sql orm pivot entity-attribute-value

我的 MySQL 数据库中有两个表,它们是: Tho tables here

我想要一些记录的字段在建表阶段没有预定义,这样我就可以使用这对表来存储设置了不同字段的记录。

我用以下记录填充这些表: Records

我想编写将返回以下结果的选择查询:

desired result

有没有办法在 MySQL 中做到这一点,或者我应该选择两个表并在 PHP 中处理它们以获得我需要的结果?

UPD:请注意,我事先不知道字段的名称是什么,因此我无法将字段的“名称”硬编码到选择查询中。

最佳答案

您可以通过检索列名并生成查询来使用动态 SQL 来完成此操作(例如: How To have Dynamic SQL in MySQL Stored Procedure )

但是我肯定会为此选择 PHP 路线。它需要大量的字符串操作,而这并不是 SQL 的设计目的。

最终查询将类似于(伪代码):

SELECT 
  ID
  ,Time
  ,Source
  ,SUM(CASE WHEN field_name = 'Length' THEN field_value END) AS [Length]
  ,etc
FROM records
  INNER JOIN fields
GROUP BY
  ID

对于找到的每个不同的字段名称使用不同的 CASE 语句。

关于mysql - 如何从专用 'fields' 表中选择值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26301630/

相关文章:

php - AWS RDS 的外键约束不起作用

java - JPQL 查询转换为 SQL 查询

java - JBoss 准备语句太慢

php - 如何在 laravel Eloquent 中按相关表的列排序?

mysql - Delphi 2010 和 Dbexpress 部署

php - ajax中的功能不起作用

python - 如何使用带有参数化占位符的 sqlite3 Python 库创建 SQLite 表?

sql - 如何在 SQL 查询中使用 LIKE 转义

Python 和 mySQL,INSERT 有效但 SELECT 返回 -1...!

java - Hibernate更新实体不知道主键