2016-07-22 15 views
0

Erhalten SQL-Fehler, glaube, dass es in der Nähe der LIKE-Anweisung befindet, aber nicht ganz sicher, warum.SQL Mögliche Syntaxfehler mit 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 

Können Sie LIKE nicht so verwenden? Wie schreibe ich diese Abfrage um?

Database Table snapshot

Bitte beachten Sie: submit_time nicht immer anders ist. submit_time bezieht sich auf die Zeit, zu der das Formular gesendet wurde, und es enthält viele andere field_name Zeilen neben submission_id. Auch field_value ist vom Typ varchar, also ist es eine Zeichenkette, obwohl sie einen ganzzahligen Wert hält.

+0

Können Sie die Fehler hinterlassen, bitte? – Will

+0

Ein Wordpress-Datenbankfehler: 'WordPress-Datenbankfehler Ungültige Verwendung der Gruppenfunktion für Abfrage' –

+1

Sie können keine Aggregatfunktionen wie' MAX' in WHERE-Klauseln verwenden; nur 'SELECT' und' HAVING' (und _maybe_ 'ORDER BY'). – Uueerdo

Antwort

1

Das Problem besteht darin, dass Sie versuchen, eine Gruppenfunktion in einem Teil der Abfrage zu verwenden, die vor dem Gruppieren verwendet wird. Sie müssen diese Bedingung in eine having-Klausel verschieben. da Sie bereits auch den MAX(IF(...)) Betrieb in der Auswahl ausführen, können Sie das Feld Referenz:

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