Foros del Web » Programando para Internet » PHP »

Fallo rarisimo con un query anidado

Estas en el tema de Fallo rarisimo con un query anidado en el foro de PHP en Foros del Web. Estoy intentando hacer un select menu que obtenga las diferentes opciones dinamicamente a partir de la BDD pero me pasa una cosa rarisima. Tengo una ...
  #1 (permalink)  
Antiguo 17/01/2010, 04:47
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Fallo rarisimo con un query anidado

Estoy intentando hacer un select menu que obtenga las diferentes opciones dinamicamente a partir de la BDD pero me pasa una cosa rarisima.
Tengo una tabla PERSONA con 2 campos: REGION (tipo smallint) y AREA (varchar), primero quiero imprimir la REGION y debajo de esta las AREAS que hay dentro de cada REGION (un poco tabuladas, al igual que el select que hay en este mismo foro en la esquina inferior derecha)

El codigo que tengo es el siguiente:

Código PHP:
include_once("conexion.php");
    
$result mysql_query("SELECT REGION FROM PERSONA GROUP BY REGION ORDER BY REGION ASC");
    while(
$fila mysql_fetch_array($result)){
        
$regionID $fila["REGION"];
        switch (
$regionID){
            case 
0:
                
$region "Anywhere";
                break;
            case 
1:
                
$region "London";
                break;
            case 
2:
                
$region "South England";
                break;
            case 
3:
                
$region "South East England";
                break;
            case 
4:
                
$region "South West England";
                break;
            case 
5:
                
$region "Wales";
                break;
            case 
6:
                
$region "Yorkshire";
                break;
            case 
7:
                
$region "East England";
                break;    
            case 
8:
                
$region "West Midlands";
                break;
            case 
9:
                
$region "East Midlands";
                break;            
            case 
10:
                
$region "Humberside";
                break;
            case 
11:
                
$region "Cumbria";
                break;
            case 
12:
                
$region "North East England";
                break;
            case 
13:
                
$region "North West England";
                break;
            case 
14:
                
$region "Northern Ireland";
                break;
            case 
15:
                
$region "Scotland";
                break;
            default:
                break;
        }
    
                echo 
"<option class=\"menutitle\">".$region."</option>";
                
//$result2 = $mysql_query("SELECT AREA FROM PERSONA WHERE REGION = $regionID GROUP BY AREA ORDER BY AREA ASC");
                /*while($fila2=mysql_fetch_array($result2)){
                    /*if($fila2["AREA"]=="" || $fila2["AREA"]==" "){
                        $fila2=mysql_fetch_array($result2);
                    }*/
                /*    echo "<option class=\"listamenu\">&nbsp;&nbsp;&nbsp;".$fila2["AREA"]."</option>";
                }*/
    
    

Pues bien, funciona todo perfectamente hasta el segundo query, si descomento el segundo query ($result2 = mysql_query(...)) deja de funcionar todo.

He comprobado que el query sea correcto y me devuelve los resultados perfectamente por lo que no entiendo como es posible que, una vez ejecutado el primer query, al ejecutar el segundo deje de funcionar todo. ¿Alguna idea?

Gracias de antemano y un saludo!

Última edición por miwelillo; 17/01/2010 a las 11:03
  #2 (permalink)  
Antiguo 17/01/2010, 08:43
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 12 años, 9 meses
Puntos: 2235
Respuesta: Fallo rarisimo con un query anidado

Deja de funcionar? en que forma?

- Te da algun mensaje de error?
- Aparece una pagina en blanco?
- Se descuadra el html?
- Alguna otra cosa?

A simple vista el codigo parece correcto... pero se necesita mas informacion para saber de que se trata el error; por cierto, seria conveniente que pongas todas las lineas del switch, por ahi podria estar el problema.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 17/01/2010, 11:05
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Deja de funcionar en el sentido de que se queda en el primer case, es decir, lista la primera opcion (en este caso seria "Anywhere") y a partir de ahi deja de funcionar (el select ya no lista nada mas). Acabo de corregir el codigo con el case completo pero es exactamente igual a lo que he puesto anteriormente por lo que no se donde puede estar el fallo. Lo que habia pensado es que a lo mejor no se pueden hacer 2 querys mientras hay uno en ejecucion pero eso me parece que tampoco tiene mucho sentido :P a ver si alguien me puede iluminar sobre esto :)

PD: Acabo de hacer una captura, quedaria algo asi:

Última edición por miwelillo; 17/01/2010 a las 11:11
  #4 (permalink)  
Antiguo 17/01/2010, 11:34
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 19 años, 3 meses
Puntos: 29
Respuesta: Fallo rarisimo con un query anidado

Tal vez break; corte el while y se acabó el asunto.
Prueba con if, elseif. Es un poco engorroso, pero es el mismo resultado.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #5 (permalink)  
Antiguo 17/01/2010, 11:36
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por CHuLoSoY Ver Mensaje
Tal vez break; corte el while y se acabó el asunto.
Prueba con if, elseif. Es un poco engorroso, pero es el mismo resultado.
Eso mismo habia pensado, ahora que alguien me lo ha "confirmado" probare a ver si funciona.
Gracias!
  #6 (permalink)  
Antiguo 17/01/2010, 11:45
Avatar de xbx
xbx
 
Fecha de Ingreso: mayo-2008
Ubicación: /home/xbx
Mensajes: 301
Antigüedad: 13 años
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por miwelillo Ver Mensaje
Eso mismo habia pensado, ahora que alguien me lo ha "confirmado" probare a ver si funciona.
Gracias!
no... break esta dentro de switch con lo cual no corta el while en este caso.
  #7 (permalink)  
Antiguo 17/01/2010, 11:57
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 11 años, 4 meses
Puntos: 7
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por miwelillo Ver Mensaje
Eso mismo habia pensado, ahora que alguien me lo ha "confirmado" probare a ver si funciona.
Gracias!
Si lo habías pensado, mi consejo es que lo pruebes, creeme que no explota nada.

El error es trivial y te figura en los archivos log, si lo hubieses posteado descomentado el propio foro te tiraba el error no hubieses visto nada porque el foro no lo distingue.

fijate ahora:

Código PHP:
include_once("conexion.php");
    
$result mysql_query("SELECT REGION FROM PERSONA GROUP BY REGION ORDER BY REGION ASC");
    while(
$fila mysql_fetch_array($result)){
        
$regionID $fila["REGION"];
        switch (
$regionID){
            case 
0:
                
$region "Anywhere";
                break;
            case 
1:
                
$region "London";
                break;
            case 
2:
                
$region "South England";
                break;
            case 
3:
                
$region "South East England";
                break;
            case 
4:
                
$region "South West England";
                break;
            case 
5:
                
$region "Wales";
                break;
            case 
6:
                
$region "Yorkshire";
                break;
            case 
7:
                
$region "East England";
                break;    
            case 
8:
                
$region "West Midlands";
                break;
            case 
9:
                
$region "East Midlands";
                break;            
            case 
10:
                
$region "Humberside";
                break;
            case 
11:
                
$region "Cumbria";
                break;
            case 
12:
                
$region "North East England";
                break;
            case 
13:
                
$region "North West England";
                break;
            case 
14:
                
$region "Northern Ireland";
                break;
            case 
15:
                
$region "Scotland";
                break;
            default:
                break;
        }
               
//Ojo que no estas comprobando que $region exista y no hay valor default en el switch
                
echo "<option class=\"menutitle\">".$region."</option>";
                
$result2 mysql_query("SELECT AREA FROM PERSONA WHERE REGION = $regionID GROUP BY AREA ORDER BY AREA ASC");
                while(
$fila2=mysql_fetch_array($result2)){
                    if(
$fila2["AREA"]=="" || $fila2["AREA"]==" "){
                        
$fila2=mysql_fetch_array($result2);
                    }
                    echo 
"<option class=\"listamenu\">&nbsp;&nbsp;&nbsp;".$fila2["AREA"]."</option>";
                }
    
    } 
Y te dejo el homework, que cambie?

Última edición por abcdefghi; 17/01/2010 a las 12:03
  #8 (permalink)  
Antiguo 17/01/2010, 12:00
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 19 años, 3 meses
Puntos: 29
Respuesta: Fallo rarisimo con un query anidado

Lo más sencillo sería tener las regiones con su identificador en una tabla de la bd, y comprobar en cada ciclo de qué región se trata.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 17/01/2010, 12:06
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 13 años, 1 mes
Puntos: 2534
Respuesta: Fallo rarisimo con un query anidado

pues yo veo que en el código de la segunda consulta... usas $mysql_query()

y si, tal ves sea por el signo de dólar... pero, como saber??

una sugerencia es que actives el reporte de errores, al inicio de tu script...
Código PHP:
ini_set('display_errors'1);
error_reporting(E_ALL); 
¿porque??

pues simplemente porque dices que todo deja de funcionar... y eso, es casi seguro porque hay algún error que no puedes ver... (:
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #10 (permalink)  
Antiguo 17/01/2010, 12:17
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 11 años, 4 meses
Puntos: 7
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por pateketrueke Ver Mensaje
pues yo veo que en el código de la segunda consulta... usas ...
Faaa bueno, hubiese sido lindo que le dejen la tarea a él, ya que son las cosas con las que te tenés que quemar para ir aprendiendo, sino uno deja de pensar para que piense el foro, no?.

Una cosa por agregar es que cambies el título porque query's anidadas técnicamente es otra cosa.
  #11 (permalink)  
Antiguo 17/01/2010, 12:20
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por pateketrueke Ver Mensaje
pues yo veo que en el código de la segunda consulta... usas $mysql_query()

y si, tal ves sea por el signo de dólar... pero, como saber??

una sugerencia es que actives el reporte de errores, al inicio de tu script...
Código PHP:
ini_set('display_errors'1);
error_reporting(E_ALL); 
¿porque??

pues simplemente porque dices que todo deja de funcionar... y eso, es casi seguro porque hay algún error que no puedes ver... (:
arrggghhhh!! tienes razon!!!!!! lo acabo de mirar y resulta que era el maldito $ que se me habia escapado :

Ahora funciona todo perfectamente...mira que he leido y repasado el codigo mil veces y se me habia pasado totalmente por alto

De todos modos me ha servido para mejorar un poco el codigo, ahora he separado las regiones y las areas en dos tablas diferentes y las he relacionado mediante un ID, de esta manera me he podido crear el tipico codigo en AJAX que selecciona una provincia en funcion del pais.

Muchiiiisimas gracias a todos, no se que haria sin vosotros!!
  #12 (permalink)  
Antiguo 17/01/2010, 12:23
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por abcdefghi Ver Mensaje
Faaa bueno, hubiese sido lindo que le dejen la tarea a él, ya que son las cosas con las que te tenés que quemar para ir aprendiendo, sino uno deja de pensar para que piense el foro, no?.

Una cosa por agregar es que cambies el título porque query's anidadas técnicamente es otra cosa.
Tienes toda la razon, pero esto no ha sido error de aprendizaje, ha sido que se me debe haber colado el $ al escribir el codigo (obviamente lo primero que aprendi es que las variables van precedidas de $ mientras que las funciones no :)
  #13 (permalink)  
Antiguo 17/01/2010, 12:25
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 13 años, 1 mes
Puntos: 2534
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por abcdefghi Ver Mensaje
Faaa bueno, hubiese sido lindo que le dejen la tarea a él, ya que son las cosas con las que te tenés que quemar para ir aprendiendo, sino uno deja de pensar para que piense el foro, no?.

Una cosa por agregar es que cambies el título porque query's anidadas técnicamente es otra cosa.
muy de acuerdo contigo, y de hecho no es mi trabajo andar leyendo los códigos que ponen... yo simplemente analizo el problema y trato de orientar hacía la solución...

muchos otros solo disparan códigos o sandeces abstractas que solo ellos entienden, vamos... muchas veces tampoco se fijan del problema real, solo intentan soluciones vanas....

pero vamos, no hay que quejarse tanto...

definitivamente un tema mal desarrollado siempre deja que desear... y como siempre, es por el mal habito de los que usan el foro de "ya me cansé de leer, a ver si alguien puede dar con el error"

bueno, cualquiera se cansa de leer... pero no de pensar, y es ahí a donde debemos apuntar nuestra ayuda... lectura, análisis, reflexión, lectura, etc, etc...
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #14 (permalink)  
Antiguo 17/01/2010, 12:31
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por pateketrueke Ver Mensaje
muy de acuerdo contigo, y de hecho no es mi trabajo andar leyendo los códigos que ponen... yo simplemente analizo el problema y trato de orientar hacía la solución...

muchos otros solo disparan códigos o sandeces abstractas que solo ellos entienden, vamos... muchas veces tampoco se fijan del problema real, solo intentan soluciones vanas....

pero vamos, no hay que quejarse tanto...

definitivamente un tema mal desarrollado siempre deja que desear... y como siempre, es por el mal habito de los que usan el foro de "ya me cansé de leer, a ver si alguien puede dar con el error"

bueno, cualquiera se cansa de leer... pero no de pensar, y es ahí a donde debemos apuntar nuestra ayuda... lectura, análisis, reflexión, lectura, etc, etc...
Totalmente de acuerdo, supongo que la unica manera de llegar a este nivel es ejercitandose mucho y tras muchos años de practica, lectura, analisis y reflexion como apuntas ;)
  #15 (permalink)  
Antiguo 17/01/2010, 12:37
 
Fecha de Ingreso: enero-2010
Mensajes: 191
Antigüedad: 11 años, 4 meses
Puntos: 7
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por miwelillo Ver Mensaje
Tienes toda la razon, pero esto no ha sido error de aprendizaje, ha sido que se me debe haber colado el $ al escribir el codigo (obviamente lo primero que aprendi es que las variables van precedidas de $ mientras que las funciones no :)
No, no me referia a eso, encontrar donde están los errores es parte de la tarea de aprender a programar, en los archivos log a este error lo tenes registrado como un e_warnings diciendote que $mysql_query no esta definido y un error al momento de ejecución porque no puede llamar a la funcion vacía, veras es perfectamente válido crear funciones con variables por eso es que el compilador no detectaba el error al momento de la compilación y te permitia hacer el primer loop, pero cuando intentaba llamar a la función

$mysql_query(...) en este caso, transforma la variable $myql_query al nombre de la función, que como esta vacia hacia null(...) y te tiene que tirar el error la función null o empty o algo por el estilo no existe.

A lo que me refería es que investigando un poquitito más los elementos básico lo sacabas y terminas aprendiendo mucho más.

Nada más que eso y por supuesto, mi comentario era como consejo para mejorar nada más, Saludos.
  #16 (permalink)  
Antiguo 17/01/2010, 13:38
 
Fecha de Ingreso: junio-2008
Mensajes: 175
Antigüedad: 12 años, 10 meses
Puntos: 11
Respuesta: Fallo rarisimo con un query anidado

Cita:
Iniciado por abcdefghi Ver Mensaje
No, no me referia a eso, encontrar donde están los errores es parte de la tarea de aprender a programar, en los archivos log a este error lo tenes registrado como un e_warnings diciendote que $mysql_query no esta definido y un error al momento de ejecución porque no puede llamar a la funcion vacía, veras es perfectamente válido crear funciones con variables por eso es que el compilador no detectaba el error al momento de la compilación y te permitia hacer el primer loop, pero cuando intentaba llamar a la función

$mysql_query(...) en este caso, transforma la variable $myql_query al nombre de la función, que como esta vacia hacia null(...) y te tiene que tirar el error la función null o empty o algo por el estilo no existe.

A lo que me refería es que investigando un poquitito más los elementos básico lo sacabas y terminas aprendiendo mucho más.

Nada más que eso y por supuesto, mi comentario era como consejo para mejorar nada más, Saludos.
Muchas gracias por tus consejos (y los de todos los que han respondido en general) tambien debo decir que de no haber preguntado, tampoco se me habria ocurrido mirar esto (es algo que quizas lei en su momento pero que ya he olvidado...las buenas practicas nunca se acabn de aprender del todo).

Lo tendre en cuenta para la proxima vez

Etiquetas: fallo, query, anidados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:01.