• Domingo 22 de Diciembre de 2024, 23:42

Autor Tema:  Select que recorra varias filas.  (Leído 1927 veces)

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Select que recorra varias filas.
« en: Jueves 30 de Julio de 2009, 00:43 »
0
Hola.

Tengo un ciclo 'for' en mi página que toma valores de mi BD e imprime categorías y subcategorías, lo más seguro es que no me explique, así que pondé un ejemplo de mi BD y un ejemplo de como quiero que aparezca en la página.

Así está más o menos mi BD:

[php:2bvfd1db]
  1.  
  2. Tabla: tabla1
  3.  
  4. Continentes   Países                        Ciudades                  (campos)
  5.  
  6. América          México                        D.F.                           (valores)
  7. América          Estados Unidos          Washington
  8. Europa           España                       Madrid
  9. Europa           Inglaterra                   Liverpool
  10. África             Egipto                         El Cairo
  11. Asia               Japón                          Hong Kong.
  12. Asia               China                          Beijing
  13. Oceanía         Australia                     Sydney.
  14. Europa          Francia                        Paris
  15.  
  16.  
[/php:2bvfd1db]

Y en la página como les repito, es un ciclo for, me gustaría hacer un 'SELECT' de alguna manera para que en la página ya apareciera algo así:

América -> México -> D.F.
Europa ->  Inglaterra -> Liverpool
etc.

Así como en la base de datos, pero por orden, yo intenté pero sólo me toma un valor no todos, sino me explico díganme y seré más detallado.

Digamos que primero se hace una consulta para ver el total de lineas que se van a tomar en cuenta con ésto:

[php:2bvfd1db]
  1.  
  2. $query = "select llave FROM tabla1 WHERE llave = '".$llave."'";
  3. $result = mysql_query($query);
  4. $activ_rows = mysql_num_rows($result);
  5.  
[/php:2bvfd1db]

Y luego el ciclo 'for':
[php:2bvfd1db]
  1.  
  2. for($filas=0;$filas+1<=$activ_rows;$filas++)
  3. {
  4. Aquí iria lo de "América -> México -> D.F.", etc.
  5. }
  6.  
[/php:2bvfd1db]

Me faltó agregar al ejemplo de mi BD que lleva una llave, para separar, aunque en el ejemplo que les mostré arriba todos llevan la misma llave, así que no importa.

Espero puedan ayudarme, se los agradezco de antemano.

Saludos.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Select que recorra varias filas.
« Respuesta #1 en: Jueves 30 de Julio de 2009, 05:38 »
0
Para eso debes hacer una consulta multiple y que tus tablas estén relacionadas, algo así:
Código: SQL
  1. SELECT con.nombre, pais.nombre, ciu.nombre
  2. FROM continentes AS con, paises AS pais, ciudades AS ciu
  3. WHERE ciu.id_pais = pais.id
  4. AND pais.id_conti = con.id
  5.  
Y te dejo las tablas que creé para la prueba
Código: SQL
  1. CREATE TABLE IF NOT EXISTS `continentes` (
  2.   `id` INT(2) NOT NULL AUTO_INCREMENT,
  3.   `nombre` VARCHAR(10) NOT NULL,
  4.   PRIMARY KEY  (`id`)
  5. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  6.  
  7. INSERT INTO `continentes` (`id`, `nombre`) VALUES
  8. (1, 'Africa'),
  9. (2, 'America'),
  10. (3, 'Asia'),
  11. (4, 'Europa'),
  12. (5, 'Oceania');
  13.  
  14. CREATE TABLE IF NOT EXISTS `paises` (
  15.   `id` INT(2) NOT NULL AUTO_INCREMENT,
  16.   `id_conti` INT(2) NOT NULL,
  17.   `nombre` VARCHAR(10) NOT NULL,
  18.   PRIMARY KEY  (`id`)
  19. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
  20.  
  21. INSERT INTO `paises` (`id`, `id_conti`, `nombre`) VALUES
  22. (1, 1, 'Angola'),
  23. (2, 1, 'Botswana'),
  24. (3, 2, 'Colombia'),
  25. (4, 2, 'Argentina'),
  26. (5, 3, 'Japon'),
  27. (6, 3, 'China'),
  28. (7, 4, 'Francia'),
  29. (8, 4, 'Alemania'),
  30. (9, 5, 'Australia'),
  31. (10, 5, 'Vanuatu');
  32.  
  33. CREATE TABLE IF NOT EXISTS `ciudades` (
  34.   `id` INT(2) NOT NULL AUTO_INCREMENT,
  35.   `id_conti` INT(2) NOT NULL,
  36.   `id_pais` INT(2) NOT NULL,
  37.   `nombre` VARCHAR(10) NOT NULL,
  38.   PRIMARY KEY  (`id`)
  39. ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
  40.  
  41. INSERT INTO `ciudades` (`id`, `id_conti`, `id_pais`, `nombre`) VALUES
  42. (1, 1, 1, 'Benguela'),
  43. (2, 1, 1, 'Cabinda'),
  44. (3, 1, 2, 'Gaborone'),
  45. (4, 1, 2, 'Jwaneng'),
  46. (5, 2, 3, 'Cali'),
  47. (6, 2, 3, 'Bogota'),
  48. (7, 2, 4, 'Mar del Pl'),
  49. (8, 2, 4, 'Buenos Air'),
  50. (9, 3, 5, 'Sapporo'),
  51. (10, 3, 5, 'Osaka'),
  52. (11, 3, 6, 'Baotou'),
  53. (12, 3, 6, 'Beijing'),
  54. (13, 4, 7, 'Paris'),
  55. (14, 4, 7, 'Bobigni'),
  56. (15, 4, 8, 'Frankfurt'),
  57. (16, 4, 8, 'Aachen'),
  58. (17, 5, 9, 'Sidney'),
  59. (18, 5, 9, 'Tasmania'),
  60. (19, 5, 10, 'Port Villa'),
  61. (20, 5, 10, 'Ambae Isla');
  62.  
  63.  
El pasado son solo recuerdos, el futuro son solo sueños

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Select que recorra varias filas.
« Respuesta #2 en: Jueves 30 de Julio de 2009, 16:02 »
0
Muchas gracias Edo, en PHPMYADMIN funciona perfecto, pero quiero ejecutar eso en mi página php, el problema más bien radicaría en incluir eso en el ciclo, o en su defecto quitar el ciclo y hacer las consultas con 'do while', pero también estoy confundido en sobre como hacer las consultas, estaba pensando en algo así, míralo y dime que piensas:

Código: PHP
  1.  $query_Recordsetcont= "CONSULTA CONTINENTE";
  2.   $Recordsetcont = mysql_query($query_Recordsetcont, $conex) or die(mysql_error());
  3. $row_Recordsetcont = mysql_fetch_assoc($Recordsetcont);
  4. do{
  5. $id_continente=$row_Recordsetcont['id_continente'];
  6. $continente=$row_Recordsetcont['continente'];
  7.  
  8.  
  9.   $query_Recordsetpais= "CONSULTA PAIS ";
  10.   $Recordsetpais = mysql_query($query_Recordsetpais, $conex) or die(mysql_error());
  11. $row_Recordsetpais = mysql_fetch_assoc($Recordsetpais);
  12. do{
  13. $id_pais=$row_Recordsetpais['id_pais'];
  14. $pais=$row_Recordsetpais['pais'];
  15.  
  16.   $query_Recordset= "CONSULTA CIUDAD";
  17.   $Recordset = mysql_query($query_Recordset, $conex) or die(mysql_error());
  18. $row_Recordset = mysql_fetch_assoc($Recordset);
  19. do{
  20. $ciudad=$row_Recordset['ciudad'];
  21.  
  22. ////Aquí se imprimen///
  23.  
  24. }while($row_Recordset= mysql_fetch_assoc($Recordset));
  25. }while($row_Recordsetpais= mysql_fetch_assoc($Recordsetpais));
  26. }while($row_Recordsetcont= mysql_fetch_assoc($Recordsetcont));
  27.  

Además, quisiera que la consulta fuera con todos, osea los continentes, paises y ciudades dentro de la misma tabla, no importa si usas un 'id' para identificarlos o ya sea el nombre, es lo de menos en realidad, lo que me importa es la consulta y que se impriman, en realidad lo que yo tengo planeado con esto, es que se impriman de acuerdo al número de ciudades, si en total son 10 ciudades, pues que todo se imprima 10 veces, ¿me explico?

Saludos.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Select que recorra varias filas.
« Respuesta #3 en: Jueves 30 de Julio de 2009, 16:18 »
0
La consulta que te hicé te mola en el PHP, solamente debes recoger el array que te suelta el query e imprimirlo después, solo tienes que usar para recorrer ese array.
El pasado son solo recuerdos, el futuro son solo sueños

Gaug

  • Miembro activo
  • **
  • Mensajes: 26
    • Ver Perfil
Re: Select que recorra varias filas.
« Respuesta #4 en: Jueves 30 de Julio de 2009, 16:27 »
0
Es que ya tengo esos datos dentro de 1 tabla, y en realidad no estoy usando nombres para continentes y paises, estoy usando 'ids' y pues para la ciudad estoy usando el nombre, podrías ayudarme con la/las consulta/s, y con un ejemplo, es que no me queda muy claro lo que me quieres decir del array.

De nuevo, gracias por tu ayuda.

RadicalEd

  • Moderador
  • ******
  • Mensajes: 2430
  • Nacionalidad: co
    • Ver Perfil
Re: Select que recorra varias filas.
« Respuesta #5 en: Viernes 31 de Julio de 2009, 17:16 »
0
Es lo mismo, realmente no entiendo en qué estás enredado, sino tienes los nombres de continente y país entonces cómo los imprimes???

Realmente qué es lo que no sabes hacer para explicarte mejor.
El pasado son solo recuerdos, el futuro son solo sueños