MySQL转换与替换

问题描述 投票:1回答:2

我试图从Forms插件中获取条目,并将结果重新格式化为更有用的前端查看格式。我相信我可以用一个支点做到这一点,但我无法从提供的示例中找到它。作为Side注释,datatbase包含来自多种不同形式的条目,因此我只能识别对查询很重要的field_id值。

当前数据格式

| entry-id | field_id |  slug  |  value  |
|   1      | fld_123  | First  |  Bob    |
|   1      | fld_234  | Last   | Smith   |
|   1      | fld_334  | Park   |Grand Can|
|   2      | fld_123  | First  | Mike    |
|   2      | fld_234  | Last   | Davis   |
|   2      | fld_334  | Park   |Grand Can|

我正在寻找的最终结果是:

|entry_ID  | First   |  Last  | park     
|  1       | Bob     | Smith  | Grand Can|
| 2        | Mike    | Davis  | Grand Can| 

请原谅条目的格式我还在想这个。

mysql group-by pivot-table
2个回答
0
投票

您可以像这样转动数据:

SELECT entry_id, 
  GROUP_CONCAT(IF(slug='First', value,'') SEPARATOR '') AS first,
  GROUP_CONCAT(IF(slug='Last', value,'') SEPARATOR '') AS last,
  GROUP_CONCAT(IF(slug='Park', value,'') SEPARATOR '') AS park 
FROM tablename
GROUP BY entry_id;

注意:如果slug条目未知,则有点棘手,需要另一种类型的查询。在表名或列名中使用连字符不是一个好主意,因此我在此示例中使用entry_id而不是entry-id

这里有sqlfiddle的例子:http://sqlfiddle.com/#!9/a03165/1/0

如果需要按值查询,可以使用子查询:

SELECT * FROM (
  SELECT entry_id, field_id,
     GROUP_CONCAT(IF(slug='First', value,'') SEPARATOR '') AS first,
     GROUP_CONCAT(IF(slug='Last', value,'') SEPARATOR '') AS last,
     GROUP_CONCAT(IF(slug='Park', value,'') SEPARATOR '') AS park 
  FROM tablename
  GROUP BY entry_id) AS rows
WHERE first = '' OR park = '';

sqlfiddle:http://sqlfiddle.com/#!9/cef544/3/0


0
投票

迈克尔,谢谢你的帮助,你的建议解决了我遇到的问题。这是我正在使用的实际查询。

SELECT entry_id,

GROUP_CONCAT(IF(field_id ='fld_5076430',value,'')SEPARATOR'')AS用户,

GROUP_CONCAT(IF(field_id ='fld_8768091',value,'')SEPARATOR'')AS首先,

GROUP_CONCAT(IF(field_id ='fld_9970286',value,'')SEPARATOR'')AS last,

GROUP_CONCAT(IF(field_id ='fld_6009157',value,'')SEPARATOR'')AS日期,

GROUP_CONCAT(IF(field_id ='fld_5105414',value,'')SEPARATOR'')AS事件,

GROUP_CONCAT(IF(field_id ='fld_7723931',value,'')SEPARATOR'')AS单位,

GROUP_CONCAT(IF(field_id ='fld_1521970',value,'')SEPARATOR'')AS工作,

GROUP_CONCAT(IF(field_id ='fld_4590434',value,'')SEPARATOR'')AS小时

来自kcdte_cf_form_entry_values

GROUP BY entry_id;

© www.soinside.com 2019 - 2024. All rights reserved.