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

Un valor especifico y null NULL

Estas en el tema de Un valor especifico y null NULL en el foro de Mysql en Foros del Web. Hola, tengo una duda con la que quisiera que me ayuden Tengo una tabla en donde tengo 3 columnas IDLectura, IDLector, IDLibro. En la segunda ...
  #1 (permalink)  
Antiguo 11/07/2013, 09:30
 
Fecha de Ingreso: julio-2011
Mensajes: 108
Antigüedad: 13 años, 3 meses
Puntos: 4
Pregunta Un valor especifico y null NULL

Hola, tengo una duda con la que quisiera que me ayuden

Tengo una tabla en donde tengo 3 columnas IDLectura, IDLector, IDLibro.
En la segunda columna se registra el ID del usuario lector, o en el caso que no este logueado / registrado guarda NULL.
Lo que yo quiero hacer es lo siguiente, es contar la cantidad de veces que se leyo un libro leido por otros usuarios que no son el autor del libro, y la cantidad de veces que se registro null

SELECT count(IDLectura) AS Cant, IDLector AS Lector, IDLibro AS LIbro FROM nombre_tabla

WHERE IDLector <> (aca pongo el id del autor)

GROUP BY Libro

Esta consulta me devuelve lo que yo quiero, pero no cuenta los NULL

entonces le agrege AND IDLector IS NULL

pero no me devuelve nada.

Probe poner solamente WHERE IDLector IS NULL para corroborar que los cuente, y si los cuenta, pero no de la otra forma o cuenta solo los que son distintos a x id o cuenta solo los null no me cuenta las dos cosas en la misma consulta..

alguien sabe porque?
  #2 (permalink)  
Antiguo 11/07/2013, 09:49
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Un valor especifico y null NULL

El tema de NULL es algo recurrente, surge de tanto en tanto, porque es algo difícil de manejar al principio.
NULL no es un dato, sino un estado de indefinición, por tanto no aplica (en MySQL) usar operadores lógicos, ya que estos actúan únicamente contra datos.
Un estado de indefinición sólo se puede comprobar, pero no se puede medir, por tanto se dene usar IS NULL, o IS NOT NULL, pero no otra cosa.
Cuando mucho se puede convertir un NULL en un dato, y para eso existe IFNULL().
En tu caso, la condición es doble, IDLector o tiene valor, o es NULL, pero si esa tabla no contiene nulos en ese campo, no te devolverá datos.
Si el objetivo es verificar qué libros no han sido leídos por nadie, o bien qué libros no ha leído un lector, necesitas dos tablas y no una, porque el cruce (con LEFT JOIN) debe devolver nulos.

En cualquier caso, tu consulta debería ser mas o menos así:
Código MySQL:
Ver original
  1. SELECT count(IDLectura) Cant,
  2.     IDLector Lector, IDLibro LIbro
  3. FROM nombre_tabla
  4. WHERE IDLector <> idAutorQueSea OR IDLector IS NULL
  5. GROUP BY Libro
__________________
¿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 11/07/2013, 12:50
 
Fecha de Ingreso: julio-2011
Mensajes: 108
Antigüedad: 13 años, 3 meses
Puntos: 4
Respuesta: Un valor especifico y null NULL

gnzsoloyo muy util su respuesta señor ahora me queda todo claro!

es una solución aceptable que convierta los NULL en un dato como por ejemplo "Anonimo" para poder contabilizarlos?

que le default en vez de ser NULL si el usuario que lee no esta logueado o registrado, que en vez de null ponga anonimo.. no?
  #4 (permalink)  
Antiguo 11/07/2013, 12:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Un valor especifico y null NULL

Cualquier cosa que no sea NULL, se puede contar. Normalmente contar NULL con un COUNT() devuelve cero en una consulta.
El uso de IFNULL() permite reemplazar la salida por NULL de una columna en una cosnulta por otra cosa. Se hace generalmente para evitar que se generen problemas en los programas, o en las vistas donde se requiere un valor no nulo, o en cualquier caso donde se pretenda reemplazar el nulo por otra cosa.
No hay una regla específica de uso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: sql-sentencia
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 03:14.