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