Consulta para encontrar id_episodios repetidos en tabla grande

  • Autor Autor xaiborweb
  • Fecha de inicio Fecha de inicio
xaiborweb

xaiborweb

Dseda
Programador
No recomendado
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
hola perdonen si no se entiende el titulo xd.

bueno tengo una tabla con mas de 1 millón de filas xd:
[table="width: 500"]
[tr]
[td]id[/td]
[td]id_episode[/td]
[td]url[/td]
[td]id_user[/td]

[/tr]
[tr]
[td]1[/td]
[td]1[/td]
[td]enlace[/td]
[td]3[/td]
[/tr]
[tr]
[td]2[/td]
[td]2[/td]
[td]enlace[/td]
[td]3[/td]
[/tr]
[tr]
[td]3[/td]
[td]3[/td]
[td]enlace[/td]
[td]3[/td]
[/tr]
[tr]
[td]4[/td]
[td]1[/td]
[td]enlace[/td]
[td]3[/td]
[/tr]
[/table]
y necesito hacer una petición que me entregue todos los id_episodios repetidos para el mismo user, en el ejemplo anterior necesito que me entregue el id: 1 y 4, pero no se me ocurre como hacer la petición, cualquier ayuda se agradece
 
select id from tabla t1 where id_user=3 and (select count(t2.id_episode) from tabla t2 where t2.id_user=t1.id_user and t2.id_episode=t1.id_episode) >1

No lo probe pq estoy en el movil pero deberia funcionar


Enviado mediante Tapatalk
 
Igual puedes probar con GROUP BY para agruparlos (y count para saber si es repetido), o es que no entendí bien tu problema.
 
select id from tabla t1 where id_user=3 and (select count(t2.id_episode) from tabla t2 where t2.id_user=t1.id_user and t2.id_episode=t1.id_episode) >1
No lo probe pq estoy en el movil pero deberia funcionar
Enviado mediante Tapatalk
hola muchas gracias, supongo que t1 es el nombre de la tabla el cual es link_episodes_en pero no se que vendría siendo t2 si solo es una tabla con barias columnas?

- - - Actualizado - - -

Igual puedes probar con GROUP BY para agruparlos (y count para saber si es repetido), o es que no entendí bien tu problema.

la cosa es que no soy un experto en peticiones mysql complejas xd soy novato en eso.
y el problema que tengo es necesito ver cuando hay mas de 1 enlace para el mismo id_episode, en el ejemplo que compartí de la tabla el id 2 y 3 estan bien no me interesa que me los muestre la petición pero el 1 y 4 tienen el mismo id_episode entonces necesito que me lo muestre
 
t1 y t2 son alias de la misma tabla


Enviado mediante Tapatalk
 
Intenta con esto, te las va a dar en el mismo campo separadas por coma por cada usuario.

PHP:
SELECT GROUP_CONCAT(id SEPARATOR ',') AS ids
    FROM table
    GROUP BY id_episode, id_user
    HAVING COUNT(id) > 1;

Saludos.
 
Última edición:
Intenta con esto, te las va a dar en el mismo campo separadas por coma por cada usuario.

PHP:
SELECT GROUP_CONCAT(id SEPARATOR ',') AD ids
    FROM table
    GROUP BY id_episode, id_user
    HAVING COUNT(id) > 1;

Saludos.

me da error la consulta Se encontró anteriormente un alias. (near "ids" at position 41)
HTML:
SELECT GROUP_CONCAT(id SEPARATOR ',') AD ids FROM link_episodes_en GROUP BY id_episode, id_user HAVING COUNT(id) > 1;

- - - Actualizado - - -

t1 y t2 son alias de la misma tabla
Enviado mediante Tapatalk
gracias por responder, se queda cargando y nunca termina hay alguna forma de ponerle un rango a la consulta gracias ?
 
Agregale al final de todo
Limit 1

Por que tarda tanto la consulta? Cuantos registeos tiene la tabla? Cuales son los campos por los que esta indexada?


Enviado mediante Tapatalk
 
me da error la consulta Se encontró anteriormente un alias. (near "ids" at position 41)
HTML:
SELECT GROUP_CONCAT(id SEPARATOR ',') AD ids FROM link_episodes_en GROUP BY id_episode, id_user HAVING COUNT(id) > 1;

- - - Actualizado - - -


gracias por responder, se queda cargando y nunca termina hay alguna forma de ponerle un rango a la consulta gracias ?

Ya arreglé la query.
 
Algo asi ?

PHP:
SELECT *, COUNT(*) c FROM tabla where id_episode  and id_user GROUP BY id_episode HAVING c > 1;
 
Agregale al final de todo
Limit 1
Por que tarda tanto la consulta? Cuantos registeos tiene la tabla? Cuales son los campos por los que esta indexada?
Enviado mediante Tapatalk
gracias por responder bro pero no me funciona asi lo estoy ponieno
PHP:
select id,id_episode,url from link_episodes_en t1 where url LIKE %123movies.to% and id_user=3 and (select count(t2.id_episode) from link_episodes_en t2 where t2.id_user=t1.id_user and t2.id_episode=t1.id_episode) >1 Limit 1
 
PHP:
SELECT id, id_episode,id_user
FROM algo
WHERE id_episode IN (
    SELECT id_episode
    FROM algo
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)
 
PHP:
SELECT id, id_episode,id_user
FROM algo
WHERE id_episode IN (
    SELECT id_episode
    FROM algo
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)

gracias por responder, me da error se que algo estoy haciendo mal
Insertar CODE, HTML o PHP:
SELECT id, id_episode,id_user
FROM link_episodes_en
WHERE id_episode IN (
    SELECT id_episode
    FROM url LIKE %nombre.com% AND id_user=3
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)
 
gracias por responder, me da error se que algo estoy haciendo mal
Insertar CODE, HTML o PHP:
SELECT id, id_episode,id_user
FROM link_episodes_en
WHERE id_episode IN (
    SELECT id_episode
    FROM url LIKE %nombre.com% AND id_user=3
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)

pues estas mesclando dos cosas... en una usar la tabla link_eposides_en y la otra usas url... esta mal eso ahi
PHP:
SELECT id, id_episode,id_user
FROM algo
WHERE id_episode IN (
    SELECT id_episode
    FROM algo
    WHERE id_user = 3 AND `url` LIKE '%sitio.com%'
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)
 
pues estas mesclando dos cosas... en una usar la tabla link_eposides_en y la otra usas url... esta mal eso ahi
PHP:
SELECT id, id_episode,id_user
FROM algo
WHERE id_episode IN (
    SELECT id_episode
    FROM algo
    WHERE id_user = 3 AND `url` LIKE '%sitio.com%'
    GROUP BY id_episode
    HAVING COUNT(id) > 1
)

xd hizo la consulta pero no entrego lo que yo quería xd
SELECT * FROM link_episodes_en WHERE id_episode IN ( SELECT id_episode FROM link_episodes_en WHERE id_user=3 AND `url` LIKE '%sitio%' GROUP BY id_episode HAVING COUNT(id) > 1 )
la tabla tiene muchos enlaces y de muchos usuarios, así obtengo todos los enlaces que quiero
SELECT * FROM `link_episodes_en` WHERE `url` LIKE '%sitio.com%' AND `id_user` = 3 ORDER BY `id_episode` ASC
pero el problema es que a la petición anterior solo quiero que me muestre los que el id_episode estén + de 1 vez, con la linea que me pásate imprime casi todos los enlaces de todos los usuarios.
 
xd hizo la consulta pero no entrego lo que yo quería xd

la tabla tiene muchos enlaces y de muchos usuarios, así obtengo todos los enlaces que quiero

pero el problema es que a la petición anterior solo quiero que me muestre los que el id_episode estén + de 1 vez, con la linea que me pásate imprime casi todos los enlaces de todos los usuarios.

si saca fuera el where...
PHP:
SELECT id, id_episode,id_user
FROM algo
WHERE id_episode IN (
    SELECT id_episode
    FROM algo
    GROUP BY id_episode
    HAVING COUNT(id) > 1
) AND id_user = 3 AND `url` LIKE '%sitio.com%'
 
Atrás
Arriba