Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

consultas vacias

Estas en el tema de consultas vacias en el foro de Mysql en Foros del Web. hola a todos, tengo una base de datos como la que sigue: Código PHP: mysql >  select  *  from usuarios ; +-----------+--------+ |  usuarioID  |  codigo  ...
  #1 (permalink)  
Antiguo 25/04/2011, 05:12
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
consultas vacias

hola a todos, tengo una base de datos como la que sigue:

Código PHP:


mysql
select from usuarios;
+-----------+--------+
usuarioID codigo |
+-----------+--------+
|         
|    456 |
|         
|    789 |
|         
|    123 |
+-----------+--------+
3 rows in set (0.00 sec
Mi consulta es buscar usuarioID a partir de un código dado, me gustaría que si la consulta sale vacía no salga respuesta "empty set" sino NULL, por ejemplo:

Código PHP:

mysql
SELECT usuarioID FROM usuarios WHERE codigo 45;
Empty 
set (0.00 sec
Me devuelva algo así:

Código PHP:

+-----------+
usuarioID |
+-----------+
|      
Null |
+-----------+ 
¿Eso puede hacerse?

Gracias!!!
  #2 (permalink)  
Antiguo 25/04/2011, 06:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas vacias

Técnicamente, no, porque "empty set" implica que sólo ha devuelto encabezados, pero no datos, y NULL no significa que no haya datos, sino que un dato contiene NULL, o su estado es indefinido.
NULL y sin registros no son conceptualmente, ni para la base de datos, la misma cosa.

¿Qué problema te causa este tipo de devolución. Pregunto porque presumo que no vas a usar esa tabla directamente en la consola sino en la programación de una aplicación, y allí la cosa se resuelve de otros modos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 25/04/2011, 07:33
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: consultas vacias

hola efectivamente, todo lo que dices es cierto.

No voy a usarlo por consola, estoy realizando una consulta grandísima (unas 20 consultas en 1) en mi base de datos, y tengo que comprobar todos los datos, parte de estas comprobaciones, son 3 valores que pueden ser erróneos, y tengo que saber cual de ellos falló porque según cual haya sido, tengo que hacer una cosa u otra.

Estoy programando en java. Una de estas consultas posibles que darían como resultado un empty set son, el código de usuario, que puede ser que no exista, un ejemplo de ello es el meter el chip de un DNI en el lector de tarjetas de crédito, leo el chip, y ese número no está en mi base de datos, resultado un empty set que yo necesito saber de donde ha venido.

Los otros dos casos son exactamente iguales al anterior.

Muchas gracias!!!
  #4 (permalink)  
Antiguo 25/04/2011, 07:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas vacias

En esos casos lo mejor es usar COUNT() para que te devuelva apariciones (que sería siempre 1 cuando existe), ya que eso al menos te devolvería un dato real. O al menos para saber previamente si tienes usuarios que cumplan la condición.
Algo como:
Código MySQL:
Ver original
  1. SELECT COUNT(*) usuarios
  2. FROM usuarios
  3. WHERE codigo = 45;
Otro detalle es que si estás usando INNER JOIN, sólo devolverá datos si y sólo si hay concidencias totales. Si una de las tablas puede devolver NULL, se debe usar LEFT JOIN o RIGHT JOIN, y buscar que aparezca el NULL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 25/04/2011, 08:04
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: consultas vacias

hola, el count no me serviría, porque sería una consulta previa, si no es "void" necesito saber que tiene, para comprobar que usuario está usando su tarjeta.

No quiero hacer consultas previas porque es muy grande mi base de datos y perdería mucho tiempo

Gracias!
  #6 (permalink)  
Antiguo 25/04/2011, 08:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: consultas vacias

Cita:
hola, el count no me serviría, porque sería una consulta previa, si no es "void" necesito saber que tiene, para comprobar que usuario está usando su tarjeta.
Si "codigo" es un campo de USUARIOS, y pueden existir valores no que no aparezcan en la tabla, ¿de dónde salen esos valores?

Todo el planteo me hace sospechar de un error de diseño de sistema, de modelado del sistema, o un defecto de diseño en la base.
Digo esto porque si en un sistema dado los usuarios tienen un ID, y además tienen asignado el uso de determinado identificador físico (tarjeta, en tu caso), no deberían existir registros en ninguna otra tabla que no aparezcan en la tabla USUARIOS y que no se relacionen con algún "codigo". Si se puede producir, hay un factor humano agregándole "ruido" al sistema.
¿De dónde proviene el "45" de tu ejemplo? ¿De alguna tabla?

Cita:
No quiero hacer consultas previas porque es muy grande mi base de datos y perdería mucho tiempo
¿A qué le llamas "muy grande"? ¿Cuán grande? ¿Cuántos registros por tabla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 25/04/2011, 08:39
 
Fecha de Ingreso: marzo-2009
Mensajes: 509
Antigüedad: 15 años, 1 mes
Puntos: 17
Respuesta: consultas vacias

Hola, no no es un error de diseño, puede ser como te digo que se utilice una tarjeta de características similares (misma tecnología) en mi sistema y al no estar dada de alta en el mismo de problemas.

Un ejemplo puede ser como dije antes que se lea el chip de un DNI en un lector de tarjetas de crédito, ese chip tiene un código, que no existirá en mi base de datos. Los otros dos casos se deben a que los datos los recibo vía inalámbrica y tengo quie comprobar que no haya habido errores.

Estoy hablando de alrededor de 1 millón de datos por tabla, y mi base de datos está formada por 50 tablas.

Gracias

Etiquetas: vacias
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 19:50.