sql请求错误语法

xzlaal3s  于 2021-06-23  发布在  Mysql
关注(0)|答案(2)|浏览(316)

嘿,伙计们,我的问题很简单:我有一个要求:

->prepare("SELECT
    CONCAT(YEAR(`p`.`created_account`), '-', MONTH(`p`.`created_account`)) AS `month` 
    FROM
   `profile` AS `p` 
    GROUP BY
    YEAR(`p`.`created_account`), MONTH(`p`.`created_account`)");

我在MySQL5中工作,但我升级到MySQL8,知道我有这个错误:
object(条令\dbal\exception\syntaxerrorexception)ť707(8){[“driverexception”:“条令\dbal\exception\driverexception”:private]=>object(条令\dbal\driver\pdoexception)Ť766(10){[“errorcode”:“条令\dbal\driver\pdoexception”:private]=>int(1064)[“sqlstate”:“条令\dbal\driver\pdoexception”:private]=>string(5)“42000”[“message”:protected]=>string(282)“sqlstate[42000]:语法错误或访问冲突:1064您的sql语法有错误;检查与mysql服务器版本相对应的手册,以获得使用“from”附近的正确语法 profile 作为 p 按年度分组( p . created_account ),月( p 在第1行“[”string“:”exception“:private]=>string(0)”“[”code“:protected]=>string(5)”42000“[”file“:protected]=>string(92)处.`created_a”
如果这有帮助的话,我有一个可以在两个版本中使用的:

->prepare("SELECT COUNT(`p`.`id`) AS `total` FROM `profile` AS `p` GROUP BY YEAR(`p`.`created_account`), MONTH(`p`.`created_account`)");

当我删除了groupby,但没有分组:/
数组(9){[0]=>数组(1){[“月”]=>字符串(6)“2018-6”}[1]=>数组(1){[“月”]=>字符串(6)“2018-6”}[2]=>数组(1){[“月”]=>字符串(6)“2018-7”}[3]=>数组(1){[“月”]=>字符串(6)“2018-8”}[4]=>数组(1){[“月”]=>字符串(6)“2018-8”}[5]=>数组(1){[“月”]=>字符串(6)“2018-8”}[6]=>数组(1){[“月”]=>字符串(6)“2018-8”}[7]=>数组(1){[“月”]=>字符串(6)“2018-8”}[8]=>数组(1){[“月”]=>字符串(6)“2018-8”}
所以我应该怎么做不重复同一个月?对于所有将要尝试回答的问题:p

epfja78i

epfja78i1#

好像你错过了一个很好的支撑 CONCAT() 你能试试吗:

SELECT CONCAT(YEAR(`p`.`created_account`), '-', MONTH(`p`.`created_account`)) AS `month` FROM `profile` AS `p` GROUP BY YEAR(`p`.`created_account`), MONTH(`p`.`created_account`)
jmp7cifd

jmp7cifd2#

好吧,我发现对有同样问题的人可以这样做:(似乎mysql的v8不允许按年份或月份分组,所以就这样做:)

->prepare("SELECT DISTINCT CONCAT(YEAR(`p`.`created_account`), '-', MONTH(`p`.`created_account`)) AS `month` FROM `profile` AS `p` GROUP BY (`created_account`)");

相关问题