SQL使用LIKE可能出现语法错误

时间:2016-07-22 22:07:27

标签: mysql 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,因此尽管保留了整数值,但它仍然是一个字符串。

1 个答案:

答案 0 :(得分:1)

问题在于您尝试在分组发生之前使用的查询的一部分中使用组函数。您需要将该条件移动到having子句。此外,由于您已在select中执行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