2011-08-04 41 views
10

Estoy buscando una manera de insertar esteMySQL group_concat_max_len en una consulta

SET GLOBAL group_concat_max_len=15000

en una consulta SQL existente, como la siguiente:

SELECT * 
FROM `Pages` 
WHERE id =1 
UNION SELECT 1 , 2, IF(1 >0, SET GLOBAL group_concat_max_len=15000,'B') 

Pero no podía hacerlo trabajo porque normalmente esta consulta se ejecuta por sí sola y me preguntaba si algunos de ustedes tenían alguna idea de cómo hacer que funcione

Respuesta

12

No puede usar una declaración SET dentro de una expresión como la que está haciendo, o incluso en una subconsulta. Ejecute SET en una sola declaración. El valor que establezca afectará las declaraciones subsiguientes.

Por cierto, ¿sabe que SET GLOBAL significa que la configuración afectará a todas las otras conexiones MySQL en su servidor, y la configuración incluso persistirá después de que termine su sesión actual, hasta que la configure en otra cosa? Es posible que desee utilizar SET SESSION si solo desea que el valor afecte su sesión actual.

+1

No conocía el comando 'SET SESSION' pero usaré este en lugar de' SET GLOBAL' Finalmente separé la consulta con un ';' y funcionó bien. Pensé que podría usarlo en la consulta SQL. Gracias por la respuesta. Por cierto, me preguntaba qué tipo de derechos necesito para crear una consulta como 'SET SESSION' o' SET GLOBAL'? – noktec

+1

Usted necesita SÚPER privilegio para usar 'SET GLOBAL'. No necesita ningún privilegio específico para usar' SET SESSION', pero por supuesto necesita privilegios para hacer muchas de las declaraciones para las cuales es posible que desee cambiar las variables de sesión. –

2

Puede ejecutarlos uno después de otro y adelgazar k que tendrá el efecto deseado o separar el con a; firmar .

+0

Finalmente utilicé su solución n con el ';' y lo combiné con el 'SET SESSION' mencionado por Bill Karwin. Gracias por la respuesta. – noktec

3

La longitud de resultado máxima permitida en bytes para la función GROUP_CONCAT(). El valor predeterminado es 1024. mysql> muestra variables como 'grupo%';

Cambia el valor de group_concat_max_len. Ya sea en su archivo de configuración o estableciendo la variable de sesión, p. "SET @@ group_concat_max_len = 2048;"

+0

hacer en el nodo cualquier idea – Ash

0

Para el nuevo usuario, mientras buscaba una solución al aumentar group_concat_max_len, identifiqué que en ciertos casos la variable no estaba definida en el archivo my.cnf. Nada de qué preocuparse solo agregar esta variable group_concat_max_len = XXXXX bajo el encabezado [mysqld] en mi. archivo CNF y mysql restart ... que haya terminado !!!

XXXXX = valor que se desea, por ejemplo: 2048,4096 etc

4

CI3 ejemplo, no puedes combinarlos, pero se puede ejecutar una consulta independiente, por ejemplo:

public function myModelFunction($id){ 

//set mysql session variable 
$this->db->query("SET @@group_concat_max_len = 2048;"); 

//actual query 
$query= $this->db->query("")..... 
+1

Gracias por la respuesta, es trabajo para mí ~ – Serip88

Cuestiones relacionadas