Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: ‭lipman en 29 Enero 2010, 19:48 pm



Título: [MySQL] Como saber cuando no he recogido datos
Publicado por: ‭lipman en 29 Enero 2010, 19:48 pm
Digamos que introduzco esta consulta:

Código
  1. SELECT * FROM asd WHERE cosa = 'rofl'

Entonces, esto me busca en la BD y mediante un bucle while podré acceder a todas las filas que concuerden con eso.

Pero quiero saber, cómo sé cuando no me recoge nada, osease, si no hubiera ninguna fila que concordase con el filtro que puse (WHERE cosa = 'rofl').

No se si me explico xD

Un saludo!


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: ^Tifa^ en 30 Enero 2010, 00:16 am
Si es al nivel de un lenguaje de programacion como php, perl, python, java o C etc, etc... Aca existen funciones para manejar el retorno de un fetchrow.  Pero puestos que no especificas si quieres averiguar esto a nivel de un lenguaje de programacion o a nivel del motor de la DB como tal, asumire que quieres obtener esto dentro del motor MySQL y no a traves de un lenguaje de programacion.

Por ende, te expongo un ejemplo, yo tengo una simple tabla con los siguientes datos:

Código
  1. mysql> SELECT * FROM ejemplo;
  2. +--------+---------+
  3. | codigo | nombres |
  4. +--------+---------+
  5. |      1 | Juan    |
  6. |      2 | Maritza |
  7. |      3 | Pepe    |
  8. +--------+---------+
  9. 3 ROWS IN SET (0.00 sec)
  10.  
  11.  

Y quiero saber cuando existen valores y cuando no existen valores en dicha tabla, entonces me ayudo de un procedimiento almacenado:

Código
  1.  
  2. mysql> delimiter /
  3. mysql> CREATE PROCEDURE ejemplo1(IN numero INTEGER)
  4.    -> BEGIN                                      
  5.    -> SELECT COUNT(*) INTO @contador FROM ejemplo WHERE codigo = numero;
  6.    -> IF ( SELECT @contador = 0 ) THEN                                  
  7.    -> SELECT concat('El valor es cero');                                
  8.    -> ELSE                                                              
  9.    -> SELECT concat('El valor no es cero');
  10.    -> END IF;                              
  11.    -> END;                                
  12.    -> /                                    
  13. Query OK, 0 ROWS affected (0.00 sec)        
  14.  
  15.  

Ahora que mi procedimiento anterior esta hecho, procedo a llamarlo pasandole 1 valor que sera el valor con el cual igualara el WHERE cosa = algo

Código
  1.  
  2. mysql> CALL ejemplo1(1);
  3. +-------------------------------+
  4. | concat('El valor no es cero') |
  5. +-------------------------------+
  6. | El valor no es cero           |
  7. +-------------------------------+
  8. 1 ROW IN SET (0.00 sec)
  9.  
  10. Query OK, 0 ROWS affected (0.00 sec)
  11.  
  12. mysql> CALL ejemplo1(19);
  13. +----------------------------+
  14. | concat('El valor es cero') |
  15. +----------------------------+
  16. | El valor es cero           |
  17. +----------------------------+
  18. 1 ROW IN SET (0.00 sec)
  19.  
  20. Query OK, 0 ROWS affected (0.00 sec)
  21.  
  22.  

Espero que mas o menos se entienda la idea  :P  aunque si esto lo piensas realizar a traves de un lenguaje de programacion que trabaje con la DB, es preferible utilizar las funciones del modulo o API de MySQL en el lenguaje para validar si retorno o no registros una consulta.


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: ‭lipman en 30 Enero 2010, 15:26 pm
Si, la idea era hacerlo através de PHP.

He estado dándole vueltas a lo que me pusiste ^^ pero no logro visualizar eso en mi cabeza para ponerlo en lenguaje PHP... no se me ocurre >.<

La "idea" que tenia, que no ha funcionado por cierto, era esta:

Código
  1. $consulta = "SELECT * FROM categorias WHERE algo = 'asd'";
  2. $resultado = mysql_query($consulta);
  3.  
  4. while ($fila = mysql_fetch_array($resultado))
  5. {
  6.  
  7.   if($fila == "") //No se me ocurre otra forma
  8.   echo "sdjahgasjg";        //de indicar que esta vacio
  9.  
  10. }
  11.  

Un saludo y gracias ^^


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: N4X en 30 Enero 2010, 16:29 pm
en php se puede hacer así:

Código
  1. <?php
  2.  
  3. include_once("conect.php");
  4.  
  5. $query = mysql_query("select asd from censor",$con);
  6.  
  7. if ($query)
  8. echo "ok";
  9. else
  10. echo "mal";
  11. ?>
  12.  
  13.  
  14.  

en ese caso retorna mal porque la tabla no contiene asd:
Código
  1. mysql> SELECT * FROM censor;
  2. +----+---------+
  3. | id | palabra |
  4. +----+---------+
  5. |  1 | tontas  |
  6. |  2 | idiota  |
  7. |  3 | feo     |
  8. |  4 | burro   |
  9. +----+---------+
  10. 4 ROWS IN SET (0.00 sec)
  11.  


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: ^Tifa^ en 30 Enero 2010, 17:39 pm
AHhhh ahora si, si es el caso hacerlo en PHP obvia el procedimiento almacenado que coloque  ;)  eso va para el motor como tal.

En tu caso como te decia, en PHP existe una funcion para manejar los registros retornados. En tu caso querras averiguar algo sobre mysql_num_rows

Fuente:  http://php.net/manual/en/function.mysql-num-rows.php

Puedes igualar que si mysql_num_rows == 0 pos imprime tu el error algo como 'No hay registros con ese valor' tu entiendes  ;)

Un saludito  :-*


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: ‭lipman en 1 Febrero 2010, 00:42 am
*Dandose cabezazos contra el escritorio*

Por dios, como no se me habia ocurrido X_X y eso que uso bastante lo de num_rows xD

Gracias por iluminarme Tifa ^^!!  ;D


Título: Re: [MySQL] Como saber cuando no he recogido datos
Publicado por: ^Tifa^ en 1 Febrero 2010, 03:07 am
Suele pasar.....

De nada chico   ;)