Pregunta

Una vez normalizada diligentemente todos mis datos, estoy teniendo un problema combinando filas 3NF en una sola fila de salida. Hasta ahora he estado haciendo esto con la codificación del lado del servidor, pero por diversas razones Ahora necesito para seleccionar todas las filas relacionadas con la otra fila, y combinarlos en una sola fila, todos en MySQL ...

Así que para tratar de explicar:

Tengo tres tablas.

  • Categorías
  • Artículos
  • CategoryArticles_3NF

Una categoría contiene CategoryID + títulos, descripciones, etc. Puede contener cualquier número de artículos en la tabla de artículos, que consiste en el campo ArticleID + un texto para albergar el contenido . Los CategoryArticles tabla se utiliza para enlazar los dos, así contiene tanto el CategoryID y ArticleID .

Ahora, si selecciono un registro Categoría, y unirse a la mesa de los artículos a través de la mesa CategoryArticles_3NF vinculación, el resultado es una fila separada para cada artículo contenido dentro de esa categoría. La cuestión es que quiero a la salida de una sola fila para cada categoría, que contiene el contenido de todos artículos dentro.

Si eso suena como una petición ridícula, es porque lo es. Sólo estoy usando artículos como una buena manera de describir el problema. Mis datos es en realidad un poco diferente.

De todos modos - la única forma que veo de lograr esto es utilizar un ' GROUP_CONCAT ' declaración de agrupar los campos de contenido junto - el problema con esto es que hay un límite a la cantidad de datos esto puede regresar, y necesito que sea capaz de manejar mucho más.

Puede alguien decirme cómo hacer esto?

Gracias.

¿Fue útil?

Solución

Esto suena como algo que se debe hacer en la parte delantera, sin más información.

Si es necesario, se puede aumentar el límite de tamaño de GROUP_CONCAT estableciendo la variable de sistema group_concat_max_len . Tiene un límite basado en max_allowed_packet , que también puede aumentar. Creo que el tamaño máximo para un paquete es de 1 GB. Si tiene que ir más alto que a continuación hay algunos defectos graves en su diseño.

EDIT: Para que esto sea en la respuesta y no sólo enterrado en los comentarios ...

Si no desea cambiar el group_concat_max_len a nivel mundial a continuación, puede cambiarlo por sólo su sesión con:

SET SESSION group_concat_max_len = <your value here>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top