MySQL - Mostrar mensaje si no encuentra datos en la consulta

 
Vista:
sin imagen de perfil

Mostrar mensaje si no encuentra datos en la consulta

Publicado por Diego (9 intervenciones) el 06/04/2018 15:10:44
Hola.
Tengo una interfaz en .net, y en ella busco usuarios registrados entre un intervalo de fechas (fecha inicio y fecha fin).

Quisiera que si no encuentra registros entre esas 2 fechas me muestre un mensaje que diga que no
existen registros en esas fechas seleccionadas.

El problema es, que no se como estructurar mi consulta para mostrar dicho mensaje, se que en .net tengo problema para crear la "condicion" con las sentencias de control (IF)

Este es mi query:

1
2
select <campos> from personas where date_format(fechahoraRUsu, '%Y-%m-%d') BETWEEN ?desde and ?hasta
    and t2.activo = 'si' and t3.activo = 'si'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Mostrar mensaje si no encuentra datos en la consulta

Publicado por Diego (9 intervenciones) el 06/04/2018 19:52:51
Ya puede resolverlo, gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Mostrar mensaje si no encuentra datos en la consulta

Publicado por leonardo_josue (414 intervenciones) el 06/04/2018 20:22:14
Hola Diego:

Hay muchas formas para obtener lo que quieres, tanto desde tu interfaz con .net o también desde Base de Datos, veamos algunas de ellas para ver cuál te conviene más:

1. La más simple sería que usando .NET valides si la consulta te regresa resultados o no... supongo que al ejecutar la consulta guardas en resultado en un DataSet, DataTable o algo parecido, entonces lo que tienes que hacer es un IF preguntando por el número de elementos que tiene esa colección. Si el objeto es null o no tiene elementos entonces quiere decir que la consulta NO REGRESO NINGÚN REGISTRO QUE CUMPLA CON LA CONDICIÓN.

2. Puedes optar por hacer dos consultas en lugar de una, primero haciendo un COUNT a la tabla para ver el número de registros que cumplen con la condición. Si el COUNT te regresa un valor mayor o igual a 1 entonces procedes a hacer el SELECT normal, en caso contrario entonces muestras el mensaje de que no existen datos.

3. desde MySQL Puedes hacer una consulta con UNION para el caso de que la consulta original no te regrese valores, es decir, algo así:

Supongamos que tienes esta tabla;

1
2
3
4
5
6
7
8
9
10
mysql> SELECT * FROM TABLA;
+------+------------+
| id   | fecha      |
+------+------------+
|    1 | 2018-06-01 |
|    2 | 2018-06-02 |
|    3 | 2018-06-03 |
|    4 | 2018-06-04 |
+------+------------+
4 rows in set (0.02 sec)

Entonces, para consultar los registros entre un rango de fechas, haces esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT
    ->   id, fecha
    -> FROM tabla
    -> WHERE fecha BETWEEN '2018-06-01' and '2018-06-04';
+------+------------+
| id   | fecha      |
+------+------------+
|    1 | 2018-06-01 |
|    2 | 2018-06-02 |
|    3 | 2018-06-03 |
|    4 | 2018-06-04 |
+------+------------+
4 rows in set (0.07 sec)

Si la consulta NO REGRESA NINGÚN REGISTRO, entonces regresa una consulta vacía:

1
2
3
4
mysql> SELECT id, fecha
    -> FROM tabla
    -> WHERE fecha BETWEEN '2018-04-01' AND '2018-04-04';
Empty set (0.00 sec)

Usando esta lógica, podrías hacer un SELECT UNION para agregar un mensaje si la consulta regresa un vacío:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
mysql> SELECT
    ->   id, fecha
    -> FROM tabla
    -> WHERE fecha BETWEEN '2018-06-01' AND '2018-06-04'
    -> UNION
    -> SELECT 'no existen registros', NULL FROM DUAL
    -> WHERE NOT EXISTS
    -> ( SELECT id
    ->   FROM tabla
    ->   WHERE fecha BETWEEN '2018-06-01' AND '2018-06-04');
+------+------------+
| id   | fecha      |
+------+------------+
| 1    | 2018-06-01 |
| 2    | 2018-06-02 |
| 3    | 2018-06-03 |
| 4    | 2018-06-04 |
+------+------------+
4 rows in set (0.01 sec)
 
mysql> SELECT
    ->   id, fecha
    -> FROM tabla
    -> WHERE fecha BETWEEN '2018-04-01' AND '2018-04-04'
    -> UNION
    -> SELECT 'no existen registros', NULL FROM DUAL
    -> WHERE NOT EXISTS
    -> ( SELECT id
    ->   FROM tabla
    ->   WHERE fecha BETWEEN '2018-04-01' AND '2018-04-04');
+----------------------+-------+
| id                   | fecha |
+----------------------+-------+
| no existen registros | NULL  |
+----------------------+-------+
1 row in set (0.00 sec)

En el primero de los casos, si existen registros que cumplan la condición entonces los muestra, en el segundo caso, si no existen registros que cumplan la condición, muestra un registro con la leyenda NO EXISTEN REGISTROS en lugar del ID.

Sin embargo, sigo pensando que la mejor manera es validar tus datos desde .NET.

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Mostrar mensaje si no encuentra datos en la consulta

Publicado por Diego (9 intervenciones) el 06/04/2018 21:10:20
Gracias por responder Leo, excelente aporte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar