2013-12-19 33 views
0

我使用下面的查詢:聯繫表格7數據庫擴展查詢

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 = '[email protected]')。 現在最終的查詢是:

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 = '[email protected]' 
GROUP BY `submit_time` 
ORDER BY `submit_time` DESC 

但其只返回了你的電子郵件值等領域值爲NULL(就像你的名字字段爲空)。

有沒有人有如何做到這一點/我可以找到解決方案的想法?

回答

2

您開始的查詢是一個彙總查詢(它有一個GROUP BY子句和一堆集合函數,如MAXGROUP_CONCAT)。你正在查詢的表是一個標籤值表。也就是說,行包含

submit-time form-name field-name field-value 
    (time)  test-form your-email  [email protected] 
    (time)  test-form your-name  Priya the Tester 

等等。您開始查詢的目的是爲了「透視」這個表,也就是說,將它轉換爲像這樣的行的結果集。它通過使用GROUP BY submit-time(這在忙碌的系統中執行該操作非常糟糕的方式,但不介意)關聯表中的各行來實現。旋轉的行大致看起來像這樣。

submit-time your-email  your-name 
    (time)  [email protected] Priya the tester 

所以,要選擇這個「結果」只有一個「行」,你需要比過濾原始表的行更聰明一些。你可以嘗試

SELECT * 
    FROM (
     /* the entire original query */ 
     ) AS pivoted 
    WHERE pivoted.`your-email` = '[email protected]' 

它不會非常有效,但它會工作。