2016-07-22 2 views
0

Ошибка Got 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 относится к тому времени, когда была отправлена ​​форма, и содержит много других строк field_name, кроме submission_id. Также field_value имеет тип varchar, поэтому это строка, несмотря на целое значение.

+0

Вы можете разместить ошибку, пожалуйста? – Will

+0

Ошибка базы данных Wordpress: 'Ошибка базы данных WordPress Недопустимое использование групповой функции для запроса' –

+1

Вы не можете использовать агрегатные функции, такие как' MAX', в предложениях WHERE; только 'SELECT' и' HAVING' (и _maybe_ 'ORDER BY'). – Uueerdo

ответ

1

Проблема в том, что вы пытаетесь использовать групповую функцию в части запроса, которая используется до группировки. Вы должны перенести это условие на предложение о наличии. Кроме того, поскольку вы уже выполняя 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