[英]MySQL - get row if another rows value is set for a group of records
我有以下由表单插件填充的MySQL数据库表。 我想为每个记录组(按“ submit_time”列值分组)提取field_name“您的电子邮件”的值,并且field_name“ checkbox-signup”的值是否为“ Signup for our email newsletter”的值。
示例数据表(表名称= dbplugin_submits):
--------------------------------------------------------------------
|submit_time|field_name |value |order|
|---------- |-------------------------------------------------------|
|1400149594 |checkbox-signup|Signup for our email newsletter |4 |
|1400149594 |your-message |Testing newsletter signup |3 |
|1400149594 |your-subject |Testing newsletter signup |2 |
|1400149594 |your-name |Test User 1 |0 |
|1400149594 |your-email |Test User@company1.co.uk |1 |
|1400149627 |your-email |Test User2@company2.co.uk |1 |
|1400149627 |your-name |Test User 2 |0 |
|1400149594 |Submitted From |188.66.94.194 |10000|
|1400149594 |Submitted Login|admin |9999 |
|1400149627 |your-subject |Testing again - please ignore |2 |
|1400149627 |your-message | |3 |
|1400149627 |checkbox-signup| |4 |
|1400149627 |Submitted Login|admin |9999 |
|1400149627 |Submitted From |188.66.94.194 |10000|
|1400149887 |your-name |Test User 3 |0 |
|1400149887 |your-email |user.three@company2.co.uk |1 |
|1400149887 |your-subject |TESTING FORM FOR ANALYTICS |2 |
|1400149887 |your-message |PLEASE IGNORE |3 |
|1400149887 |checkbox-signup| |4 |
|1400149887 |Submitted From |188.66.94.194 |10000|
|1400768741 |your-name |Test User |0 |
|1400768741 |your-email |testuser@company.co.uk |1 |
|1400768741 |your-subject |Testing |2 |
|1400768741 |your-message |Please ignore - just testing |3 |
|1400768741 |checkbox-signup|Signup for our email newsletter |4 |
|1400768741 |Submitted Login|admin |9999 |
|1400768741 |Submitted From |188.66.94.19 |10000|
-------------------------------------------------------------------
我尝试了以下方法,但是不确定内部查询是否是此处的正确方法:
SELECT a.*
FROM `dbplugin_submits` a
INNER JOIN
(
SELECT `submit_time`
FROM `dbplugin_submits`
GROUP BY `submit_time`
) b ON a.`submit_time` = b.`submit_time`
AND a.`field_name` = 'checkbox-signup'
AND a.`field_value` = 'Sign up for our email newsletters'
AND b.`field_name` = 'your-email'
任何帮助将不胜感激!
它没有经过测试,但是应该可以正常工作:
SELECT a.submit_time, b.value FROM dbplugin_submits a
JOIN dbplugin_submits b ON (a.submit_time = b.submit_time AND b.field_name='your-email')
WHERE a.field_name = 'checkbox-signup' AND a.value = 'Signup for our email newsletter'
是的,你是对的。 自联接是解决此问题的方法。 您所构建的查询几乎就在那里。 但是,您可以使用非常简单的自联接查询来实现。
这就是我为SQL Server编写它的方式(在SQL Server上测试) 。
SELECT email.submit_time, email.field_name, email.value
FROM dbplugins_submit email
INNER JOIN dbplugins_submit signup
ON email.submit_time = signup.submit_time
WHERE email.field_name = 'your-email'
AND signup.field_name = 'checkbox-signup'
AND signup.value = 'signup for our email newsletter'
我不确定SQL和MySQL之间在此查询方面在语法上是否有差异。 这在SQL中有效,因此对于MySQL,查询必须相同(如果不同)。 试试看,让我知道这是否适合您:)
希望这会有所帮助!!!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.