cómo establecer MYSQL CONCAT MAX LENGTH
He seleccionado concat en mi procedimiento de tienda como este
SET @resultQuery = CONCAT("
SELECT
@no := @no + 1 AS no,
uniqueCode,
orderNumber,
orderDate,
orderTime,
salesName,
buyerCategory,
discountCode,
buyerName,
email,
mobile,
module,
module_id,
productsNumber,
purchaseValue,
postalFee,
discount,
premium,
uniqueCode2,
total,
", @productsSelect, "
FROM
(SELECT
@uniqueCode := IFNULL(om.id, 0) AS uniqueCode,
@orderNumber := IFNULL(om.code_order, '') AS orderNumber,
IFNULL(DATE_FORMAT(om.createdAt, '%e/%c/%Y'), '') AS orderDate,
IFNULL(DATE_FORMAT(om.createdAt, '%H:%i'), '') AS orderTime,
IFNULL(sls.fullname, '') AS salesName,
IFNULL((CASE
WHEN EXISTS (SELECT
ob.buyer_id
FROM
order_match om2
LEFT JOIN
order_buyer ob2 ON om2.order_buyer_id = ob2.id
WHERE
om2.createdAt < ?
AND om2.order_status_id IN (4, 5, 6, 8)
AND ob.buyer_id = ob2.buyer_id
GROUP BY ob2.buyer_id)
THEN 'Ulang'
ELSE 'Baru'
END), '') AS buyerCategory,
IFNULL(odis.discount_code, '') AS discountCode,
IFNULL(usr.fullname, '') AS buyerName,
IFNULL(usr.email, '') AS email,
IFNULL(usr.mobile, '') AS mobile,
mdl.name AS module,
mdl.id AS module_id,
@i AS productsNumber,
", @products, "
@purchaseValue := IFNULL(om.total_price, 0) AS purchaseValue,
@postalFee := IFNULL(od.price, 0) AS postalFee,
@discount := IFNULL((SELECT
CASE
WHEN EXISTS (SELECT
rdh.debit
FROM
referral_deposit_histories rdh
WHERE
rdh.order_match_id = om2.id
AND
rdh.debit > 0)
THEN (SELECT
rdh.debit
FROM
referral_deposit_histories rdh
WHERE
rdh.order_match_id = om2.id
AND
rdh.debit > 0)
ELSE (SELECT
odis2.discount_amount
FROM
order_discount odis2
WHERE
odis2.order_match_id = om2.id)
END
FROM
order_match om2
WHERE
om2.id = om.id), 0) AS discount,
@premium := IFNULL(op.price, 0) AS premium,
@uniqueCode2 := IFNULL(CASE
WHEN om.createdAt > '2017-08-02 23:59:59'
THEN pmh.price
ELSE @uniqueCode
END, 0) AS uniqueCode2,
@total := IFNULL(@purchaseValue + @postalFee - @discount + @premium + @uniqueCode2, 0) AS total
FROM
order_match om
LEFT JOIN
order_discount odis ON om.id = odis.order_match_id
LEFT JOIN
discount_sales ds ON odis.discount_code = ds.discount_code
LEFT JOIN
sales sls ON ds.sales_id = sls.id
LEFT JOIN
order_buyer ob ON om.order_buyer_id = ob.id
LEFT JOIN
users usr ON ob.buyer_id = usr.id
LEFT JOIN
order_delivery od ON om.id = od.order_match_id
LEFT JOIN
order_premium op ON om.id = op.order_match_id
LEFT JOIN
payment_method_history pmh ON om.id = pmh.order_match_id
LEFT JOIN
modules mdl ON om.module_id = mdl.id
WHERE
om.createdAt >= ?
AND om.createdAt <= ?
AND om.order_status_id IN (4, 5, 6, 8)
ORDER BY om.createdAt DESC) paidOrdersTable");
PREPARE stmt FROM @resultQuery;
SET @paramDateFrom = paramDateFrom;
SET @paramDateTo = paramDateTo;
EXECUTE stmt USING @paramDateFrom, @paramDateFrom, @paramDateTo;
DEALLOCATE PREPARE stmt;
y regresa Error Code: 1117. Too many columns
cómo fijar la longitud máxima para concat, lo que aprendo en otra plataforma, su conjunto grupo_concat_max_len, pero ya que no es grupo concat (porque es concat no group_concat), ¿qué debo tomar para resolver este problema? Necesito un código como set group_concat_max_len pero para concat no group_concat
Pregunta hecha hace 3 años, 4 meses, 29 días - Por codemaster89
2 Respuestas:
-
El error que estás recibiendo es porque estás intentando concatenar demasiadas columnas en MySQL y has alcanzado el límite permitido para el número de columnas en una consulta.
Para resolver este problema, una posible solución sería separar tu consulta en partes más pequeñas y luego combinar los resultados manualmente. Por ejemplo, podrías dividir tu consulta en dos partes y luego combinar los resultados en una tabla temporal.
Aquí te dejo un ejemplo simplificado de cómo podrías hacerlo:
sql
- - Primera parte de la consulta
- - Coloca aquí la primera parte de tu consulta original
- - Segunda parte de la consulta
- - Coloca aquí la segunda parte de tu consulta original
- - Combinar los resultados
- - Limpieza de tablas temporales
En este ejemplo, dividimos tu consulta original en dos partes y guardamos los resultados en tablas temporales, luego combinamos los resultados en una consulta final. Recuerda ajustar el código según la estructura y necesidades de tu consulta original.
Espero que esta sugerencia te ayude a resolver el problema de concatenación de columnas en tu consulta MySQL. ¡Déjame saber si necesitas más ayuda!
Respondida el Dec 18, 2020 a las 02:50 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
Puedes establecer la longitud máxima para CONCAT utilizando la variable de sesión
max_allowed_packet
. Esta variable controla el tamaño máximo de los paquetes que MySQL puede enviar y recibir.Para establecer la longitud máxima de CONCAT, ejecuta el siguiente comando:
sql SET max_allowed_packet =
; Sustituye
<longitud_máxima_en_bytes>
por el tamaño máximo en bytes que deseas permitir para los resultados de CONCAT.Una vez que hayas establecido la variable
max_allowed_packet
, MySQL truncará automáticamente los resultados de CONCAT que superen la longitud máxima especificada.Ejemplo:
Para establecer la longitud máxima de CONCAT en 10 MB, ejecuta el siguiente comando:
sql SET max_allowed_packet = 10000000;
Nota:
El valor predeterminado de
max_allowed_packet
es de 4 MB. El valor máximo posible paramax_allowed_packet
es de 1 GB.- Si estableces `max_allowed_packet` en un valor demasiado bajo, podrías experimentar errores de truncamiento en los resultados de CONCAT.
Una vez que hayas establecido la longitud máxima para CONCAT, vuelve a ejecutar tu procedimiento almacenado y comprueba si se resuelve el error
Too many columns
.Respondida el Dec 18, 2020 a las 03:00 - por Gemini
Votos positivos: 0 | Votos negativos: 0