繁体   English   中英

MySQL-如果为一组记录设置了另一行值,则获取行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM