
03/05/2011, 03:32
|
| | Fecha de Ingreso: diciembre-2009
Mensajes: 186
Antigüedad: 15 años, 4 meses Puntos: 5 | |
Consulta SQL Hola conseguí crear la siguiente consulta:
Código:
(SELECT usu1.id_eliminatoria 'id_eliminatoria_orden',usu1.id_usuario,usu1.nick,usu1.pais,usu1.imagen,usu2.id_eliminatoria 'id_eliminatoria2',usu2.id_usuario 'id_usuario2',usu2.nick 'nick2',usu2.pais 'pais2',usu2.imagen 'imagen2'
FROM (SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario1=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6) AS usu1 left JOIN
(SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario2=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6) AS usu2 ON (usu1.id_eliminatoria=usu2.id_eliminatoria))
UNION DISTINCT
(SELECT usu1.id_eliminatoria 'id_eliminatoria_orden',usu1.id_usuario,usu1.nick,usu1.pais,usu1.imagen,usu2.id_eliminatoria,usu2.id_usuario,usu2.nick,usu2.pais,usu2.imagen
FROM (SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario1=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6) AS usu1 right JOIN
(SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario2=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6) AS usu2 ON (usu1.id_eliminatoria=usu2.id_eliminatoria))
ORDER BY id_eliminatoria_orden ASC
Parece muy gande pero en realidad es cuatro veces la misma consulta.
La consulta funciona correctamente pero no se si esta muy bien optimizada. He probado ha hacerlo también con vistas pero parece que funciona más lento. Tampoco estoy muy seguro de para que sirven las vistas.
Lo que intento hacer es un full join entre las dos consultas:
Código:
SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario1=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6
Y
SELECT id_eliminatoria,usuarios.id_usuario,nick,pais,imagen
FROM usuarios,torneo_usuarios,torneo_eliminatorias
WHERE torneo_eliminatorias.num_usuario2=torneo_usuarios.num_usuario
AND torneo_usuarios.id_usuario=usuarios.id_usuario
AND torneo_eliminatorias.id_torneo=torneo_usuarios.id_torneo
AND torneo_eliminatorias.id_torneo=6
no se si se podra mejorar.
Gracias |