显示列出值而不是有组织列的数据库的MySQL结果

时间:2016-05-31 23:57:30

标签: mysql wordpress select gravity-forms-plugin

在WordPress上,我们使用Gravity Forms来收集用户数据。我有时间有效或正确地显示结果,因此我可以操作它并创建客户列表页面。

我习惯于看到像这样的数据库:

id |名字|姓氏|等。| form_id

1 |约翰| Doe | x | 12

但Gravity表格存储的数据如下:

id | field_number | form_id |值

1 | 8 | 3 |约翰

2 | 14 | 3 | DOE

当然有几个field_numbers与名字,姓氏,地址,电话等相对应,但我没有列出它们。

所以我想做的就是运行一个SELECT语句并显示结果很好并且组织如下:

John Doe(需要在循环中彼此相邻排列的两个字段)

地址(当然我可以在循环中放置一个中断) 等

我道歉但我没有以这种方式提取数据,我甚至不知道它叫什么。

下面的代码是显示事物的微弱尝试,但我知道它必须是完全低效和不正确的。提取数据的正确方法是什么?这种类型的存储被称为什么(Gravity Forms正在这样做)?

global $wpdb;
$rows = $wpdb->get_results( "SELECT form_id, value, field_number FROM     
wp_rg_lead_detail WHERE form_id=3" );
foreach( $rows as $row ) {
if($row->field_number==1) {
    echo $row->value; 
}
if($row->field_number==8) {
    echo $row->value; 
}
}

1 个答案:

答案 0 :(得分:0)

不幸的是,我没有为您提供干净的解决方案,除了真正的邪恶之外,我不知道这种存储形式是什么。也就是说,我认为已经过了几个小时没有回复,你可能会欣赏一些新的想法作为可能的试验途径。我在这里包括2条思路,它们应该与其他数据的mod一起使用,尽管仍然很蹩脚。祝你好运。

select distinct
  f.form_id, 
  concat(first.val, ' ', last.val) as name
from
  form f
  inner join 
   (select f1.form_id, f1.val from form f1 where f1.field_number = 8) as first
   on f.form_id = first.form_id
  inner join 
   (select f2.form_id, f2.val from form f2 where f2.field_number = 14) as last
   on f.form_id = last.form_id
  where f.form_id = 3;


select distinct
  f.form_id, 
  n.name
from
  form f
  inner join 
    (select 
       form_id, 
       group_concat(distinct val order by field_number asc separator ' ') as name
     from 
       form 
     where 
       field_number = 8 
       or field_number = 14 
     group by form_id) n 
   on f.form_id = n.form_id
  where f.form_id = 3;