Consulta SQL para una relación de uno a muchos

Tengo dos tablas, la Tabla A y la Tabla B. Para cada registro de la tabla A hay muchos registros en la Tabla B; por lo tanto, existe una relación de uno a muchos entre las tablas A y B. Quiero realizar una consulta para que, por cada fila devuelta de la tabla A, todas las filas correspondientes se devuelvan de la tabla B. Por lo que entiendo, necesitaré usar un INNER Join - sin embargo, ¿cómo haría para acceder a todas las filas devueltas a través de, por ejemplo, PHP?

$sql = "Select A.ID, B.Name * From A INNER JOIN B ON A.ID = B.ID";
ID A. | B.fNombre | B.lNombre 1 nombreuno lnombreuno 1 nombredos lnombredos 2 nombretres lnombretres 4 nombrecuatro lnombrecuatro

Ahora que tengo los resultados anteriores, quiero usar PHP para recorrer todos los valores de B.Name solo para un solo A.ID a la vez Entonces, los resultados que quiero se verían así:

1. nombreUno lNombreUno nombreDos lnombredos 2. nombretres lNombretres 4. nombreCuatro lNombreCuatro

Básicamente, estoy tratando de agrupar los resultados de la consulta por ID en la tabla A.

Agradezco mucho la ayuda!

Gracias,

Evan

preguntado el 22 de mayo de 12 a las 15:05

¿Qué sistema de base de datos estás usando? ¿Puede realizar una selección simple e iterar sobre el conjunto de resultados devuelto? Si puedes, puedes hacer lo que quieras exactamente de la misma manera. No hay diferencia en lo que hace con PHP solo porque el SQL contiene una cláusula JOIN:

MYSQL, y puedo recorrer fácilmente mysql_fetch_assoc, pero quiero hacer un ciclo dentro de un ciclo, básicamente y basar el ciclo en A.ID. -

2 Respuestas

Podría simplemente buscar en Google "php obtener de la base de datos" y usar un preprocesamiento de matriz normal, pero me preocupa que el consejo que encuentre no sea el ideal. Esto es lo que haría:

$pdo = new PDO('mysql:host=host;dbname=dbname', 'user', 'pass');
$result = $pdo->query(<<<SQL
   SELECT
      ID,
      Name
   FROM
      A
      -- Alternative to `JOIN B USING(ID)` or `JOIN B ON (A.ID = B.ID)
      NATURAL JOIN B
SQL
);
$a = array();
while ($row = $result->fetch()) {
   if (!isset($a[$row['ID']]) {
      $a[$row['ID']] = array();
   }
   $a[$row['ID']][] = $row['Name'];
}

También podrías GROUP BY el ID y GROUP_CONCAT los nombres para ser exploded en PHP más tarde para omitir la creación manual de matrices y reducir algunas iteraciones (aunque SQL hará más en ese caso).

contestado el 22 de mayo de 12 a las 15:05

woah, eso es un montón de información. Muy bien, supongo que "buscar" es exclusivo de PDO. ¿Podría hacer lo mismo usando $row = mysql_fetch_assoc)? - usuario725913

@Evan, esta es mi forma de sugerir encarecidamente que use PDO. - Pastillas explosivas

Añadiendo un simple ORDER BY A.ID a la consulta SQL probablemente lo llevaría bastante lejos al "agrupar" los elementos. Es difícil dar una respuesta más detallada sin saber exactamente qué quieres hacer con los "grupos".

contestado el 22 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.