首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Contact form 7数据库扩展查询

Contact form 7数据库扩展查询
EN

Stack Overflow用户
提问于 2013-12-19 20:50:54
回答 1查看 1.3K关注 0票数 0

我正在使用下面的查询:

代码语言:javascript
复制
SELECT `submit_time` AS 'Submitted',
 max(if(`field_name`='your-name', `field_value`, null )) AS 'your-name',
 max(if(`field_name`='your-email', `field_value`, null )) AS 'your-email',
 max(if(`field_name`='your-phone', `field_value`, null )) AS 'your-phone',
 max(if(`field_name`='Submitted From', `field_value`, null )) AS 'Submitted From',
 GROUP_CONCAT(if(`file` is null or length(`file`) = 0, null, `field_name`)) AS 'fields_with_file'
FROM `wp_cf7dbplugin_submits` 
WHERE `form_name` = 'test form'  
GROUP BY `submit_time` 
ORDER BY `submit_time` DESC
LIMIT 0,100

这将返回前100行(所有字段的值都存在)。

我想要的是获得一个特定的行,这是我在查询的WHERE子句部分中用这一行( AND field_name='your-email' AND field_value = 'test@gm.com')附加的。现在,最后一个查询是:

代码语言:javascript
复制
SELECT `submit_time` AS 'Submitted',
 max(if(`field_name`='your-name', `field_value`, null )) AS 'your-name',
 max(if(`field_name`='your-email', `field_value`, null )) AS 'your-email',
 max(if(`field_name`='your-phone', `field_value`, null )) AS 'your-phone',
 max(if(`field_name`='Submitted From', `field_value`, null )) AS 'Submitted From',
 GROUP_CONCAT(if(`file` is null or length(`file`) = 0, null, `field_name`)) AS 'fields_with_file'
FROM `wp_cf7dbplugin_submits` 
WHERE `form_name` = 'test form'  AND field_name=your-email AND field_value = 'test@gm.com'
GROUP BY `submit_time` 
ORDER BY `submit_time` DESC

但是它只返回your-email值,而其他字段的值变成NULL(就像your-name字段是NULL一样)。

有没有人知道怎么做/在哪里可以找到解决方案?

EN

回答 1

Stack Overflow用户

发布于 2013-12-19 21:12:01

您开始使用的查询是一个摘要查询(它有一个GROUP BY子句和一组聚合函数,如MAXGROUP_CONCAT)。您要查询的表是一个标记值表。也就是说,这些行包含

代码语言:javascript
复制
 submit-time    form-name   field-name    field-value
   (time)      test-form    your-email      test@gm.com
   (time)      test-form    your-name       Priya the Tester

等等。您开始的查询的目的是“透视”这个表,也就是说,将它转换为一个结果集,其中的行如下所示。它通过使用GROUP BY submit-time关联表中的不同行来做到这一点(在繁忙的系统中,这是一种非常糟糕的方式,但没关系)。旋转后的行大致如下所示。

代码语言:javascript
复制
    submit-time your-email     your-name
     (time)      test@gm.com   Priya the tester

因此,要只选择这个“结果”中的一个“行”,您需要稍微聪明一点,而不仅仅是过滤原始表的行。你可以试一试

代码语言:javascript
复制
 SELECT * 
   FROM (
       /* the entire original query */
         ) AS pivoted
  WHERE pivoted.`your-email` = 'test@gm.com'

它不会非常有效,但它会工作的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20682250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档