php - MySql 中表的动态 header

标签 php mysql sql dynamic

这是我的第一个问题。抱歉,我的英语不好,而且还混杂着西类牙语,我来自乌拉圭。

我有这个急诊室(示例): enter image description here 我有一个与许多概念值有某种关系的人(CI)。 这些概念有 Unidad、Clase、Estado 等,它们有一些关联的值,例如“Unidad”的 2021,1061,1003。 对于每个概念,都有一些字段(Fecha、Expediente、Commentario、Usuario),其中行是 CI 概念的最大“Fecha”值。 我想列出一个人的所有关系,如下所示:

标题:

CI  |   Concepto1_clave |   Concepto1_Fecha |   Concepto1_Expediente    |   Concepto1_Comentario    |   Concepto1_Usuario   |   Concepto2_clave |   Concepto2_Fecha |   Concepto2_Expediente    |   Concepto2_Comentario    |   Concepto2_Usuario   |   ConceptoN...

值(value)观:

Person_CI   |   Value of concepto 1 |   Fecha of concepto 1 |   Expediente of concepto 1    |   Comentairo of concepto 1    |   Usuario of concepto 1   |   Value of concepto 2 |   Fecha of concepto 2 |   Expediente of concepto 2    |   Comentairo of concepto 2    |   Usuario of concepto 2   |   ...

所有内容都必须是动态的,当我创建一个新概念时,它将出现在查询中。 我尝试了许多查询和程序,但没有成功。 我使用 PHP 来获取结果。 非常感谢您的帮助!!

编辑:

这是我的 table :

Persona_ClaveConcepto

    +--------+-------------------+------------+---------+---------------+---------------+---------+
| CI     | Concepto          | Fecha      | Clave   | Expediente    | Comentario    | Usuario |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Clase             | 1997-06-10 | X.C0.1E | FOR06/97      | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Situacion laboral | 1997-06-01 | 52      | FOR06/97      | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 238351 | Unidad            | 2015-07-16 | 1532    | CARGA SISTEMA |               |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 612344 | Clase             | 0000-00-00 | X.C0.1E | CARGA SISTEMA |               |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+
| 612344 | Situacion laboral | 1996-03-01 | 52      | HAB           | CARGA SISTEMA |         |
+--------+-------------------+------------+---------+---------------+---------------+---------+

所有“Concepto”的预期结果(类似的结果):

    +--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
| CI     | Clase   | Fecha_Clase | Expediente_Clase | Comentario_Clase | Usuario_Clase | SituacionLaboral | Fecha_SituacionLaboral | Expediente_SituacionLaboral | Comentario_SituacionLaboral | Usuario_SituacionLaboral |
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+
| 238351 | X.C0.1E | 1997-06-10  | FOR06/97         | CARGA SISTEMA    |               | 52               | 1997-06-01             | FOR06/97                    | CARGA SISTEMA               |                          |
+--------+---------+-------------+------------------+------------------+---------------+------------------+------------------------+-----------------------------+-----------------------------+--------------------------+

最佳答案

非常感谢! 我用这个查询解决了它。希望可以帮助别人。

/* GROUP CONCAT LIMIT*/
SET SESSION group_concat_max_len = 1000000;

/* DECLARE */
SET @sqlMax = NULL;
SET @sqlCase = NULL;
SET @sql = NULL;

/* SET sqlMax (discard empty values) */
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'GROUP_CONCAT(',replace(Concepto, ' ', ''),') AS ',replace(Concepto, ' ', ''),
      ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Fecha) AS ',replace(Concepto, ' ', ''),'_Fecha',
      ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Expediente) AS ',replace(Concepto, ' ', ''),'_Expediente',
      ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Comentario) AS ',replace(Concepto, ' ', ''),'_Comentario',
      ',GROUP_CONCAT(',replace(Concepto, ' ', ''),'_Usuario) AS ',replace(Concepto, ' ', ''),'_Usuario'
    )
  ) 
INTO @sqlMax
from persona_claveconceptoperseo;

/* SET sqlCase */
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'case when Concepto = ''',Concepto,''' then Clave end AS ',replace(Concepto, ' ', ''),
      ',case when Concepto = ''',Concepto,''' then Fecha end AS ',replace(Concepto, ' ', ''),'_Fecha'
      ',case when Concepto = ''',Concepto,''' then Expediente end AS ',replace(Concepto, ' ', ''),'_Expediente'
      ',case when Concepto = ''',Concepto,''' then Comentario end AS ',replace(Concepto, ' ', ''),'_Comentario'
      ',case when Concepto = ''',Concepto,''' then Usuario end AS ',replace(Concepto, ' ', ''),'_Usuario'
    )
  ) 
INTO @sqlCase
from persona_claveconceptoperseo;

/* SET sql */
SET @sql = CONCAT('SELECT CI, ', @sqlMax, ' 
                  FROM (
                    SELECT
                    CI,',@sqlCase,'
                  FROM persona_claveconceptoperseo) as t1
GROUP BY t1.CI');

/* EXECUTE */
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

关于php - MySql 中表的动态 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38623315/

相关文章:

php - 我如何让这个小 PHP 数组工作?

mysql - 使用更新连接表时,操作数应包含 1 列

sql - Informix:如何获取最后插入的记录的ID

mysql - 检查MySql中json列的值(数组)中是否包含某个元素

PHP - 如果自动加载,为什么要使用依赖注入(inject)?

php - 从 mysql_query 切换到 PDO 的问题

MYSQL通过多个用户id选择消息线程id

mysql - 如何从表中获取每个 id 的最新状态?

mysql - 通过外键查找 Max() 值

PHP xmlrpc 客户端和 Python 2.5 xmlrpc 服务器 : incomplete data and Connection reset by peer error