todas sirve sintaxis resultados registros que por para menos las filas expresiones deben datos contener contar como agrupar mysql apache cakephp

sirve - sintaxis group by mysql



Error de sintaxis o violación de acceso: 1055 La expresión n.º 8 de la lista SELECCIONAR no está en la cláusula GROUP BY y contiene una columna no agregada (5)

Probé el "Tutorial de Bookmaker" 3.PH de CakePHP y seguí las instrucciones paso a paso. Desafortunadamente, al final del primer capítulo recibo el error adjunto:

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #8 of SELECT list is not in GROUP BY clause and contains nonaggregated column ''wis.Tags.id'' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

Además, obtengo la información para verificar mi tabla "BookmarksTags" pero no tengo que crear una antes. Estoy un poco confundido.

Please try correcting the issue for the following table aliases: BookmarksTags

Ya googleé mi problema y encontré información para actualizar el "my.cnf" con una línea adicional. Ya lo intenté pero no pasó nada. También compruebo la ortografía y descargué el "bookmarker-tutorial" de github, pero sigo recibiendo el error anterior.

Yo uso MySQL 5.7.11 y PHP 5.6.14.


Esto es algo nuevo en MySQL 5.7 y es una advertencia de que su consulta es ambigua.

Considera la siguiente tabla:

id | name | age | points -------------------------------------------- 1 Bob 21 1 2 James 14 1 3 Bob 21 3 4 James 14 2 5 Casey 17 3

Si hiciste la siguiente consulta:

SELECT name, age, SUM(points) FROM scores GROUP BY name

Luego, la columna de name se usa para agrupar. Tenga en cuenta que la age puede tener valores múltiples, por lo que es "no agregada". Debe hacer algo para contraer esos valores.

El comportamiento en 5.6 y anteriores consistía simplemente en elegir el primero según el orden de clasificación, aunque a veces era impredecible y fallaba. En 5.7 te están impidiendo hacerlo en primer lugar.

La solución aquí es agruparlo también, o aplicarle un operador agregado como MIN() .


Acabo de tropezar con el mismo problema.
Una forma sencilla de hacer que el tutorial "funcione" sin cambiar la consulta podría ser restablecer sql_mode en config/app.php :

''Datasources'' => [ ''default'' => [ ''className'' => ''Cake/Database/Connection'', ''driver'' => ''Cake/Database/Driver/Mysql'', ''persistent'' => false, ''host'' => ''localhost'', ... ''init'' => ["SET sql_mode = ''''"], ],

Si bien esto debería hacer que las cosas funcionen, probablemente no se recomienda en casos de la vida real.


Estoy usando Laravel 5.4 y estoy enfrentando el mismo problema.
Intento establecer strict en false en config/database.php y funciona.

''connections'' => [ ''mysql'' => [ ''strict'' => false, ] ]

Sin embargo, es mejor editar la consulta SQL que suprimir su advertencia.


Este puede ser el problema relacionado con la versión más nueva de MySQL, como dijiste que estás utilizando MySQL 5.7.11. Para resolver este problema para todos tus sitios, mira esto.

https://craftcms.stackexchange.com/questions/12084/getting-this-sql-error-group-by-incompatible-with-sql-mode-only-full-group-by/13662#13662

la respuesta por comunidad para agregar la línea a continuación

sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

en el archivo /etc/mysql/my.cnf y guardándolo; y luego de reiniciar el servidor

sudo service mysql restart

Haría el trabajo


Además del comentario de tadman, para el tutorial que está siguiendo, debe agrupar su consulta de selección sql en Bookmarks.id y BookmarksTags.tag_id, en lugar de solo en Bookmarks.id

Para hacer eso, en el archivo BookmarksTable.php, línea

->distinct([''Bookmarks.id''])

debería verse como

->distinct([''Bookmarks.id'', ''BookmarksTags.tag_id''])