Эй, ребята, мой вопрос очень прост: у меня был этот запрос:
->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`)");
Я был в MySQL 5, и это работает, но я обновляюсь до MySQL 8 и знаю, что у меня есть эта ошибка:
объект (Doctrine \ DBAL \ Exception \ SyntaxErrorException) # 707 (8) {[«driverException»: «Doctrine \ DBAL \ Exception \ DriverException»: private] => объект (Doctrine \ DBAL \ Driver \ PDOException) # 766 (10) {[«errorCode»: «Doctrine \ DBAL \ Driver \ PDOException»: private] => int (1064) [«sqlState»: «Doctrine \ DBAL \ Driver \ PDOException»: private] => string (5) «42000» [«message»: protected] => string (282) «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL есть ошибка; обратитесь к руководству, соответствующему версии сервера MySQL, чтобы узнать правильный синтаксис для использовать рядом с
profile
КАКp
ГРУППА ПО ГОДУ (p
,created_account
), МЕСЯЦ (p
.`created_a ‘в строке 1 «[» string «:» Exception «: private] => string (0)» «[» code «: protected] => string (5)» 42000 «[» file «: protected] => строка (92)
Если это может помочь, у меня есть тот, который работает в обеих версиях:
->prepare("SELECT COUNT(`p`.`id`) AS `total` FROM `profile` AS `p` GROUP BY YEAR(`p`.`created_account`), MONTH(`p`.`created_account`)");
И когда я удаляю группу, это работает, но не группируется по: / так у меня есть:
array (9) {[0] => array (1) {[«month»] => string (6) «2018-6»} [1] => array (1) {[«month»] => string (6) «2018-6»} [2] => array (1) {[«month»] => string (6) «2018-7»} [3] => array (1) {[«month» ] => string (6) «2018-8»} [4] => array (1) {[«month»] => string (6) «2018-8»} [5] => array (1) { [«month»] => string (6) «2018-8»} [6] => array (1) {[«month»] => string (6) «2018-8»} [7] => array (1) {[«month»] => string (6) «2018-8»} [8] => array (1) {[«month»] => string (6) «2018-8»}}
Так что я должен сделать, чтобы не повторить тот же месяц? спасибо за все что постараюсь ответить: p
Похоже, вам не хватает тесной связи для 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`)
хорошо, я нашел, просто сделай так для тех, у кого такая же проблема: (кажется, что v8 mysql не позволяет группе ГОД или МЕСЯЦ, так что просто сделай 🙂
->prepare("SELECT DISTINCT CONCAT(YEAR(`p`.`created_account`), '-', MONTH(`p`.`created_account`)) AS `month` FROM `profile` AS `p` GROUP BY (`created_account`)");