PHP - MySQL Comparar dos Select de la misma tabla

 
Vista:
Imágen de perfil de Pepe

MySQL Comparar dos Select de la misma tabla

Publicado por Pepe (9 intervenciones) el 13/04/2022 10:26:01
Buenos días a todos y gracias de antemano,

tengo una tabla con la siguiente estructura:


1
2
3
4
5
6
7
id                    id_usuario         fecha
--------------      --------------      --------
        1               123456          10/10/2021
        2                568947         10/10/2021
        3                985647         10/10/2021
        1                256846         10/10/2022
        2                123456         10/10/2022
Necesito comparar varios ids, para ver los id_usuario coincidentes. Por ejemplo si comparo el id =1 con el Id=2 el resultado seria 123456, que es el coincidente.

Algo asi, pero claro esto no funciona:

1
SELECT * FROM TABLA WHERE id=1 AS A INNER JOIN (SELECT * FROM TABLA WHERE id=2) AS B WHERE A.id_usuario = B.id_usuario;

No se como hacer una comparación de dos select de la misma tabla
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
Imágen de perfil de Pepe

MySQL Comparar dos Select de la misma tabla

Publicado por Pepe (9 intervenciones) el 13/04/2022 12:17:16
He conseguido hacer algo así:

1
SELECT id_user FROM `tabla1` WHERE `id`= 1 OR `id`= 2  GROUP BY id_user HAVING COUNT(id_user) > 1;

No tengo mucha practica con MySql y seguro que habrá mejores formas de hacerlo, si alguien se le ocurre alguna mejor no duden en decírmelo, muchas 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
Imágen de perfil de Pepe

MySQL Comparar dos Select de la misma tabla

Publicado por Pepe (9 intervenciones) el 13/04/2022 12:28:29
También necesitaría saber cuantos registros son coincidentes, pero si hago un COUNT de la siguiente manera, me da como resultado las veces que se repite cada elemento y yo quiero saber el total de elementos que cumplen la condicion.

1
2
SELECT COUNT(id_user) FROM `tabla1` WHERE `id`= 24893900 OR `id`= 601887686  GROUP BY id_user
HAVING COUNT(id_user) > 1;
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
Imágen de perfil de Ivan

MySQL Comparar dos Select de la misma tabla

Publicado por Ivan (118 intervenciones) el 13/04/2022 19:01:38
Hola,

primero de todo, en una tabla Mysql, el identificador ID suele ser un índice único y no repetido para esa tabla y los identificadores tipo id_usuario son índices que pueden estar repetidos y sirven de enlace hacia otras tablas. Esta es una premisa esencial para trabajar con bases de datos.

A partir de esto he creado una tabla como la de tu ejemplo pero con el siguiente contenido:

1
2
3
4
5
6
ID	id_usuario	fecha
1 	123456 	2021-10-10
2 	568947 	2021-10-10
3 	985647 	2021-10-10
4 	256846 	2022-10-10
5 	123456 	2022-10-10

Como puedes ver he creado índices ID únicos.
Para recorrer dos veces la misma tabla puedes añadirla 2 veces en el FROM y utilizar alias del tipo:

1
FROM mitabla T1, mitabla T2

y ya te puedes referir a ella como T1 y T2.

En tu caso hago la siguiente consulta:

1
2
3
4
5
SELECT T1.*,
COUNT(T1.ID) AS N
FROM mitabla T1, mitabla T2
WHERE T1.id_usuario = T2.id_usuario
GROUP BY T1.ID

Esta consulta compara cada índice de T1 con todos los índices de T2 (producto cartesiano) con el siguiente resultado:

1
2
3
4
5
6
ID	id_usuario	fecha   N
1 	123456 	2021-10-10 	2
2 	568947 	2021-10-10 	1
3 	985647 	2021-10-10 	1
4 	256846 	2022-10-10 	1
5 	123456 	2022-10-10 	2

Este resultado te muestra los ID que contienen id_usuario repetidos y el nº de veces que está repetido.
Espero que te sirva.

Un saludo!
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