2016-07-22 51 views
0

得到SQL錯誤,相信它位於LIKE聲明附近,但不完全確定原因。SQL使用LIKE可能的語法錯誤

SELECT submit_time            AS datetime, 
     Max(IF(field_name = 'first-name', field_value, NULL)) AS fName, 
     Max(IF(field_name = 'submission_id', field_value, NULL)) AS id 
FROM wp_cf7dbplugin_submits 
WHERE form_name = 'Personal Info' 
    AND (Max(IF(field_name = 'submission_id', field_value, '')) LIKE '%4%') 
GROUP BY submit_time 
ORDER BY Max(IF(field_name = 'submission_id', field_value, '')) DESC 
LIMIT 0, 40 

你不能使用LIKE那樣嗎?如何重寫這個查詢?

Database Table snapshot

請注意:submit_time並不總是不同的。 submit_time指的是表單被提交的時間,它包含submission_id以外的許多其他field_name行。另外field_value的類型爲varchar,所以它是一個字符串,儘管存在一個整數值。

+0

你能後的錯誤嗎? – Will

+0

wordpress數據庫錯誤:'WordPress數據庫錯誤無效的查詢使用組函數' –

+1

您不能在WHERE子句中使用集合函數,比如'MAX';只有'SELECT'和'HAVING'(和_maybe_'ORDER BY')。 – Uueerdo

回答

1

問題是,您正嘗試在發生分組之前使用查詢的一部分中使用組函數。您需要將該條件移至having子句。此外,由於你已經在選擇執行MAX(IF(...))操作,您可以參考該字段:

SELECT submit_time AS datetime, 
    ..., 
    MAX(IF(field_name = 'submission_id', field_value, NULL)) AS id, 
    ... 
FROM wp_cf7dbplugin_submits 
WHERE form_name = 'Personal Info' 
GROUP BY submit_time 
HAVING id LIKE '%4%' 
ORDER BY id DESC LIMIT 0, 40