2016-12-17 58 views
0

我在我的WordPress网站中使用卡尔德拉表单来收集我们俱乐部新入场的数据。按预期形成功能。我正在尝试查看打开的应用程序列表以及查看它们的页面。以下是我的SQL表项条目(cf_form_entries)。基于sql结果显示行

+----+-----------------+--------+ 
| ID | Form ID   | Status | 
+----+-----------------+--------+ 
| 1 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 
| 2 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 
| 3 | CF5852c23e56b1d | active | 
+----+-----------------+--------+ 

下表包含表格提交的所有信息(cf_form_entry_values);

+----+----------+---------------+--------------------+ 
| id | entry_id |  slug  |  value  | 
+----+----------+---------------+--------------------+ 
| 1 |  1 | branch  | Branch A   | 
| 2 |  1 | full_name  | asdasd asdasd  | 
| 3 |  1 | email_address | [email protected] | 
| 4 |  1 | phone   | 111111111   | 
| 5 |  2 | branch  | Branch A   | 
| 6 |  2 | full_name  | Full Name   | 
| 7 |  2 | email_address | [email protected] | 
| 8 |  2 | phone   | 111111111   | 
| 9 |  3 | branch  | Branch A   | 
| 10 |  3 | full_name  | Namwe    | 
| 11 |  3 | email_address | [email protected] | 
| 12 |  3 | phone   | 111111111   | 
+----+----------+---------------+--------------------+ 

我可以运行一个简单的查询select并获得一个给定的分支,内侧连接表的打开的应用程序的详细信息。

SELECT cf_form_entries.id, 
     cf_form_entries.form_id, 
     cf_form_entries.status, 
     cf_form_entry_values.slug, 
     cf_form_entry_values.value 
FROM cf_form_entry_values 
    INNER JOIN cf_form_entries 
    ON cf_form_entry_values.entry_id = cf_form_entries.id 
WHERE cf_form_entry_values.slug = 'branch' 
    AND cf_form_entry_values.value LIKE '%Branch A%' 

以上查询结果如下表所示;

+----+-----------------+--------+--------+----------+ 
| id |  form_id  | status | slug | value | 
+----+-----------------+--------+--------+----------+ 
| 1 | CF5852c23e56b1d | active | branch | Branch A | 
| 3 | CF5852c23e56b1d | active | branch | Branch A | 
+----+-----------------+--------+--------+----------+ 

我的问题是,如何显示(回波)的其他详细信息,如姓名,电子邮件地址,选择表等?

因此,我最终的结果应该在表格中显示打开的应用程序的所有细节。 (不只是分支名称)

我试了一个while循环。但我只能回显分支名称,因为它们是在我的内部连接表中选择的唯一数据。

+0

这些记录名称,电子邮件地址等都在哪个表中? –

+0

@AmitKumarSahu,就像我说的,他们在'cf_form_entry_values' – Sid

回答

2

一种方法是有条件聚集:

SELECT fe.id, fe.form_id, fe.status, 
     MAX(CASE WHEN fev.slug = 'branch' THEN fev.value END) as branch, 
     MAX(CASE WHEN fev.slug = 'full_name' THEN fev.value END) as full_name, 
     . . . 
FROM cf_form_entries fe INNER JOIN 
    cf_form_entry_values fev 
    ON fev.entry_id = fe.id 
GROUP BY fe.id, fe.form_id, fe.status; 

这种方法的好处是添加新值只需要在SELECT中添加新的表达式。

+0

似乎很好。如何添加'WHERE',以便我可以选择一个分支的结果? – Sid

+0

我试着添加一个空的结果。考虑使用'HAVING'而不是 – Sid

+0

@Sid。 。 。 '有分支= ??'。 –

1

尝试通过在两个表上使用LEFT JOIN进行查询。

SELECT cfev.*,cfm.Form ID as entry_id 
    FROM cf_form_entry_values cfev 
     LEFT JOIN cf_form_entries cfm ON cfm.id = cfev.entry_id 
      WHERE cfev .slug = 'branch' AND vfm.value LIKE '%Branch A%' 

这可能是有用的。你会得到正确的输出...

1

这应该给你的前两个值,并且可以使用相同的模式为休息:

SELECT entries.id, 
     entries.form_id, 
     entries.status, 
     (SELECT value FROM cf_form_entry_values as v 
     WHERE slug='branch' and entry_id=entries.entry_id) as branch, 
     (SELECT value FROM cf_form_entry_values as v 
     WHERE slug='full_name' and entry_id=entries.entry_id) as full_name 
FROM cf_form_entry_values 
INNER JOIN (
    SELECT * FROM cf_form_entry_values 
    INNER JOIN cf_form_entries 
    ON cf_form_entry_values.entry_id = cf_form_entries.id 
    WHERE cf_form_entry_values.slug = 'branch' 
    AND cf_form_entry_values.value LIKE '%Branch A%' 
) as entries 
    ON cf_form_entry_values.entry_id = entries.id 
GROUP BY cf_form_entries.id