Pregunta

En el escenario hipotético en el que tengo un par de tablas de la base, en una relación de uno a muchos. Estoy tratando de encontrar una función agradable consulta para que pueda regresar cada fila de la tabla A con una matriz anidada para todas las filas de la tabla B vinculadas.

SELECT a.id AS id,a.name as name,b.id AS b_id,b.name AS b_name FROM a,b WHERE a.id=b.eid;

devolverá sólo uno de los resultados

SELECT 
    a.id AS id,
    a.name as name,
    GROUP_CONCAT(b.id) AS b_id,
    GROUP_CONCAT(b.name) AS b_name 
FROM a,b 
WHERE a.id = b.eid;

Esto devuelve mientras que lo que quieren, pero no estoy después de una serie de una cadena (no podría ser comas en b.name)

¿Qué me falta?

¿Fue útil?

Solución

Se pueden utilizar diferentes separador de coma:

GROUP_CONCAT(b.name SEPARATOR ';') AS b_name

Otros consejos

No es posible volver aparte de un tipo de datos MySQL nada, por lo que la respuesta corta es no, no puede devolver una matriz (anidado o no) de los resultados de una subconsulta. También verá algunos de los éxitos de rendimiento bastante drásticas tratando de valores concatenados cadena acumulación del extranjero, el orden subcadena será implícita y, como usted ha aludido, tendrá problemas seleccionando un delimitador adecuado.

Es casi seguro que va a ser un uso más eficiente una combinación sencilla para crear un único conjunto de resultados. Cualquier duplicados en el lado "uno" de la relación debe ser manejado mediante programación (que es preferible, en ningún sentido, a la manipulación de la división de cadena en varios campos concatenados).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top