[MySQL] Como saber cuando no he recogido datos

Iniciado por ‭lipman, 29 Enero 2010, 19:48 PM

0 Miembros y 1 Visitante están viendo este tema.

‭lipman

Digamos que introduzco esta consulta:

Código (oracle8) [Seleccionar]

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!

^Tifa^

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 (sql) [Seleccionar]

mysql> select * from ejemplo;
+--------+---------+
| codigo | nombres |
+--------+---------+
|      1 | Juan    |
|      2 | Maritza |
|      3 | Pepe    |
+--------+---------+
3 rows in set (0.00 sec)



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

Código (sql) [Seleccionar]


mysql> delimiter /
mysql> create procedure ejemplo1(in numero integer)
    -> begin                                       
    -> select count(*) into @contador from ejemplo where codigo = numero;
    -> if ( select @contador = 0 ) then                                 
    -> select concat('El valor es cero');                               
    -> else                                                             
    -> select concat('El valor no es cero');
    -> end if;                             
    -> end;                                 
    -> /                                   
Query OK, 0 rows affected (0.00 sec)       



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 (sql) [Seleccionar]


mysql> call ejemplo1(1);
+-------------------------------+
| concat('El valor no es cero') |
+-------------------------------+
| El valor no es cero           |
+-------------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

mysql> call ejemplo1(19);
+----------------------------+
| concat('El valor es cero') |
+----------------------------+
| El valor es cero           |
+----------------------------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.00 sec)



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.

‭lipman

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 (php) [Seleccionar]

$consulta = "SELECT * FROM categorias WHERE algo = 'asd'";
$resultado = mysql_query($consulta);

while ($fila = mysql_fetch_array($resultado))
{

   if($fila == "") //No se me ocurre otra forma
   echo "sdjahgasjg";        //de indicar que esta vacio

}


Un saludo y gracias ^^

N4X

en php se puede hacer así:

Código (php) [Seleccionar]
<?php

include_once("conect.php");

$query mysql_query("select asd from censor",$con);

if (
$query)
echo "ok";
else
echo "mal";
?>





en ese caso retorna mal porque la tabla no contiene asd:
Código (sql) [Seleccionar]

mysql> select * from censor;
+----+---------+
| id | palabra |
+----+---------+
|  1 | tontas  |
|  2 | idiota  |
|  3 | feo     |
|  4 | burro   |
+----+---------+
4 rows in set (0.00 sec)


^Tifa^

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  :-*

‭lipman

*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

^Tifa^