我正在尝试从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|
请原谅我仍在解决的条目格式。
答案 0 :(得分: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
答案 1 :(得分: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 date,
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小时
FROM kcdte_cf_form_entry_values
GROUP BY entry_id;