MySQL - Multiples SELECTS con misma condición.

 
Vista:
Imágen de perfil de mrc
Val: 11
Ha disminuido su posición en 5 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Multiples SELECTS con misma condición.

Publicado por mrc (6 intervenciones) el 04/04/2019 17:04:45
Buenas a todos y gracias de antemano por vuestra atención.
Mi duda es la siguiente:

Tengo una tabla con unos 700 datos aprox con ID autoincremental y con estos campos:

1
2
3
4
5
6
7
8
9
10
11
12
13
+------+------+------+------+
| id   | pos1 | pos2 | pos3 |
+------+------+------+------+
|    1 |    9 |    2 |    3 |
|    2 |    3 |    2 |    9 |
|    3 |    1 |    4 |    3 |
|   4 |    1 |    2 |    3 |
|   5 |    5 |    1 |    6 |
|   6 |    1 |    2 |    3 |
|   7 |    8 |    2 |    0 |
|   ... |    ... |   .. . |    ... |
|   etc |    etc |    etc |    etc |
+------+------+------+------+

Sucede que yo realizo siempre una consulta que contiene varios selects y una condición en común, todo unido por "UNION" de esta manera:

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
37
38
39
40
41
42
select *
    from listado T1
     where pos_1 = ***  and pos_2 = ***  and pos_3 = ***       and exists (
       select id
       from listado T2
       where
     T2.pos_1 = ***  and pos_2 = ***  and pos_3 = ***
 
 
  and T2.id >= T1.id - 10
            and T2.id <= T1.id + 10
     and T1.id != T2.id )
 
     UNION
 
     select *
    from listado T3
     where pos_1 = ***  and pos_2 = ***  and pos_3 = ***    and exists (
       select id
       from listado T4
       where
     T4.pos_1 = ***  and pos_2 = ***  and pos_3 = ***
 
  and T4.id >= T3.id - 10
            and T4.id <= T3.id + 10
     and T3.id != T4.id )
 
     UNION
 
     select *
    from listado T5
     where pos_1 = ***  and pos_2 = ***  and pos_3 = ***    and exists (
       select id
       from listado T6
       where
     T6.pos_1 = ***  and pos_2 = ***  and pos_3 = ***
  and T6.id >= T5.id - 10
            and T6.id <= T5.id + 10
     and T5.id != T6.id )
 
 
     ORDER BY id ASC

De tal manera que esta consulta me devuelve las filas que coincidan con los números que yo he introducido en las posiciones correspondientes (pos_1,pos_2,pos_3) de la tabla, PERO con la condición de que los RESULTADOS de esta búsqueda no DISTEN entre sí mas de 10 POSICIONES por ID como podéis ver que hago con el fragmento:
1
2
3
and T***.id >= T***.id - 10
            and T***.id <= T***.id + 10
     and T***.id != T***.id )

Hasta aquí todo correcto, el problema está en que al realizar esta consulta tal como está hecha los RESULTADOS que me devuelve son los SELECTS de forma independiente unos de otros, es decir, sólo me muestra los datos que consulto AGRUPADOS individualmente unos SELECTS de los otros... osea que está omitiendo TODOS los resultados que entremezclen las filas de los 3 SELECTS si es que así deba ser porque así aparezca en la tabla. Me esta sacando los resultados POR SEPARADO y yo necesito que los SELECTS esten unidos como un unico SELECT y no me separe y divida los resultados en tres SELECTS diferentes... y no tengo ni idea de cómo acomodar la consulta para poder hacerlo... Compartiendo la condición de que los resultados no disten entre si por ID mas de 10 posiciones y conjuntamente POR EJEMPLO la linea de resultado del SELECT nº1 este dentro de la linea del resultado del SELECT Nº2 o del Nº3 si es que debe estarlo porque así se encuentre en la TABLA...

Gracias
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