Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/05/2013, 15:26
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Duda como realizar una consulta (select)

Hola steffyn_90:

Podrías utilizar la función GROUP_CONCAT para generar una nueva columna con una lista de todas las marcas asociadas separadas por comas, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM persona;
  2. +-----------+--------+----------+----------------+
  3. | identidad | nombre | apellido | numero_celular |
  4. +-----------+--------+----------+----------------+
  5. |         1 | uno    | one      | 123-456        |
  6. |         2 | dos    | two      | 987-765        |
  7. +-----------+--------+----------+----------------+
  8. 2 rows in set (0.00 sec)
  9.  
  10. mysql> SELECT * FROM celular_panel;
  11. +-----------+---------------+
  12. | identidad | marca_celular |
  13. +-----------+---------------+
  14. |         1 | LG            |
  15. |         1 | Motorola      |
  16. |         2 | Nokia         |
  17. |         2 | Samsung       |
  18. +-----------+---------------+
  19. 4 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT P.*, GROUP_CONCAT(marca_celular) marcas
  22.     -> FROM persona P
  23.     -> INNER JOIN celular_panel C ON C.identidad = P.identidad
  24.     -> GROUP BY identidad;
  25. +-----------+--------+----------+----------------+---------------+
  26. | identidad | nombre | apellido | numero_celular | marcas        |
  27. +-----------+--------+----------+----------------+---------------+
  28. |         1 | uno    | one      | 123-456        | LG,Motorola   |
  29. |         2 | dos    | two      | 987-765        | Nokia,Samsung |
  30. +-----------+--------+----------+----------------+---------------+
  31. 2 rows in set (0.00 sec)

Si necesitas tenerlos como columnas separadas, será un poco más complicado, pues supongo que no todas las personas tendrán el mismo numero de marcas asociadas, podrías agregar un índice a tu tabla más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM celular_panel;
  2. +-----------+-------------+---------------+
  3. | identidad | num_celular | marca_celular |
  4. +-----------+-------------+---------------+
  5. |         1 |           1 | LG            |
  6. |         1 |           2 | Motorola      |
  7. |         2 |           1 | Nokia         |
  8. |         2 |           2 | Samsung       |
  9. +-----------+-------------+---------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT P.*,
  13.     -> MAX(IF(num_celular = 1, marca_celular, NULL)) marcas1,
  14.     -> MAX(IF(num_celular = 2, marca_celular, NULL)) marcas2
  15.     -> FROM persona P
  16.     -> INNER JOIN celular_panel C ON C.identidad = P.identidad
  17.     -> GROUP BY identidad;
  18. +-----------+--------+----------+----------------+---------+----------+
  19. | identidad | nombre | apellido | numero_celular | marcas1 | marcas2  |
  20. +-----------+--------+----------+----------------+---------+----------+
  21. |         1 | uno    | one      | 123-456        | LG      | Motorola |
  22. |         2 | dos    | two      | 987-765        | Nokia   | Samsung  |
  23. +-----------+--------+----------+----------------+---------+----------+
  24. 2 rows in set (0.00 sec)

Tendrías que agregar tantos MAX-IF con el número máximo de teléfonos que tenga una persona. Dale un vistazo y nos comentas.

Saludos
Leo.