Ver Mensaje Individual
  #4 (permalink)  
Antiguo 01/10/2011, 21:55
Avatar de gnzsoloyo
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: Mostrar consulta Mysql con valores Null

Mira, no creo que la consulta que te propongo te esté dando lo mismo que tu sacas al principio. Si yo la ejecuto sobre la consola de MySQL, lo que obtengo es:
Código MySQL:
Ver original
  1. mysql> CREATE TABLE horas(r_hora TIME);
  2. Query OK, 0 rows affected (0.01 sec)
  3.  
  4. mysql> INSERT INTO horas
  5.     -> VALUES
  6.     -> ('07:00:00'),
  7.     -> ('08:00:00'),
  8.     -> ('09:00:00'),
  9.     -> ('10:00:00'),
  10.     -> ('11:00:00'),
  11.     -> ('12:00:00'),
  12.     -> ('13:00:00'),
  13.     -> ('14:00:00'),
  14.     -> ('15:00:00'),
  15.     -> ('16:00:00'),
  16.     -> ('17:00:00'),
  17.     -> ('18:00:00'),
  18.     -> ('19:00:00'),
  19.     -> ('20:00:00');
  20. Query OK, 14 rows affected (0.04 sec)
  21. Records: 14  Duplicates: 0  Warnings: 0
  22.  
  23. mysql> CREATE TABLE citas(fecha DATE, hora TIME);
  24. Query OK, 0 rows affected (0.01 sec)
  25.  
  26. mysql> INSERT INTO citas
  27.     -> VALUES
  28.     -> ('2011-09-25','07:00:00'),
  29.     -> ('2011-09-25','09:00:00'),
  30.     -> ('2011-09-25','12:00:00'),
  31.     -> ('2011-09-25','15:00:00'),
  32.     -> ('2011-09-25','16:00:00'),
  33.     -> ('2011-09-25','17:00:00');
  34. Query OK, 6 rows affected (0.02 sec)
  35. Records: 6  Duplicates: 0  Warnings: 0
Y los datos obtenidos:
Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM horas H LEFT JOIN citas C ON H.`r_hora` = C.hora;
  3. +----------+------------+----------+
  4. | r_hora   | fecha      | hora     |
  5. +----------+------------+----------+
  6. | 07:00:00 | 2011-09-25 | 07:00:00 |
  7. | 08:00:00 | NULL       | NULL     |
  8. | 09:00:00 | 2011-09-25 | 09:00:00 |
  9. | 10:00:00 | NULL       | NULL     |
  10. | 11:00:00 | NULL       | NULL     |
  11. | 12:00:00 | 2011-09-25 | 12:00:00 |
  12. | 13:00:00 | NULL       | NULL     |
  13. | 14:00:00 | NULL       | NULL     |
  14. | 15:00:00 | 2011-09-25 | 15:00:00 |
  15. | 16:00:00 | 2011-09-25 | 16:00:00 |
  16. | 17:00:00 | 2011-09-25 | 17:00:00 |
  17. | 18:00:00 | NULL       | NULL     |
  18. | 19:00:00 | NULL       | NULL     |
  19. | 20:00:00 | NULL       | NULL     |
  20. +----------+------------+----------+
  21. 14 rows in set (0.00 sec)
Lo que es manifiestamente diferente de lo que dices, y es exactamente lo que quieres obtener.
Existen, si, algunas diferencias:
1) Las horas se deben almacenar en campos de tipo TIME y las fechas en campos de tipo DATE. Tu parece que lo haces en VARCHAR, lo cual es un error grave y que puede generar errores de consulta y resultados erróneos.
2) Si lo que quieres obtener es la hora en formato AM/PM, no es necesario un VARCHAR para ello. Basta con usar la función adecuada:
Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->   LOWER(DATE_FORMAT(r_hora, '%H:%m%p')) r_hora,
  3.     ->   IFNULL(DATE_FORMAT(fecha, '%m-%d-%Y'), '') fecha,
  4.     ->   IFNULL(LOWER(DATE_FORMAT(hora, '%H:%m%p')), '') hora
  5.     -> FROM horas H LEFT JOIN citas C ON H.`r_hora` = C.hora;
  6. +---------+------------+---------+
  7. | r_hora  | fecha      | hora    |
  8. +---------+------------+---------+
  9. | 07:00am | 09-25-2011 | 07:00am |
  10. | 08:00am |            |         |
  11. | 09:00am | 09-25-2011 | 09:00am |
  12. | 10:00am |            |         |
  13. | 11:00am |            |         |
  14. | 12:00pm | 09-25-2011 | 12:00pm |
  15. | 13:00pm |            |         |
  16. | 14:00pm |            |         |
  17. | 15:00pm | 09-25-2011 | 15:00pm |
  18. | 16:00pm | 09-25-2011 | 16:00pm |
  19. | 17:00pm | 09-25-2011 | 17:00pm |
  20. | 18:00pm |            |         |
  21. | 19:00pm |            |         |
  22. | 20:00pm |            |         |
  23. +---------+------------+---------+
  24. 14 rows in set (0.00 sec)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)