Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

sql consulta cruzada

Estas en el tema de sql consulta cruzada en el foro de Bases de Datos General en Foros del Web. Hola, tengo estas tablas Quiero sacar los comentarios que hay de cada receta, y tienen que salir el usuario que hizo la receta y el ...
  #1 (permalink)  
Antiguo 29/07/2009, 07:55
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 4 meses
Puntos: 18
sql consulta cruzada

Hola, tengo estas tablas


Quiero sacar los comentarios que hay de cada receta, y tienen que salir el usuario que hizo la receta y el usuario que publicó el comentario, los cuales están los dos en la misma tabla USUARIOS. Por ahora lo he hecho así, metiendo dos veces la tabla usuarios en la consulta y dándole un alias :
Código SQL:
Ver original
  1. SELECT
  2.     recetas.NombreReceta
  3.     , comentarios.comentario
  4.     , usuarios.usuario AS usuariorec
  5.     , usu2.usuario AS usuariocom
  6. FROM
  7.     comentarios
  8.     INNER JOIN recetas
  9.         ON (comentarios.receta_id = recetas.IDReceta)
  10.     INNER JOIN usuarios usu2
  11.         ON (comentarios.usuario_id = usu2.id_usuario)
  12.     INNER JOIN usuarios
  13.         ON (recetas.idusuario = usuarios.id_usuario);

Pero incluso con sólo 10 o 12 comentarios es lenta.

¿Alguna sugerencia para ligerarla, por favor?
Gracias.

Última edición por trasgukabi; 29/07/2009 a las 11:01
  #2 (permalink)  
Antiguo 29/07/2009, 08:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 10 meses
Puntos: 360
Respuesta: sql consulta cruzada

No he probado, pero como quedaría así?

Código sql:
Ver original
  1. SELECT
  2.     recetas.NombreReceta
  3.     , comentarios.comentario
  4.     , usuarios.usuario AS usuariorec
  5.     , usu2.usuario AS usuariocom
  6. FROM
  7.     comentarios
  8.     INNER JOIN recetas_wiki.recetas
  9.         ON (comentarios.receta_id = recetas.IDReceta)
  10.     INNER JOIN recetas_wiki.usuarios usu2
  11.         ON (comentarios.usuario_id = usu2.id_usuario
  12.         AND recetas.idusuario = usu2.id_usuario)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 29/07/2009, 08:22
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 4 meses
Puntos: 18
Respuesta: sql consulta cruzada

Gracias, pero no, así no puede ser, ya que hay que sacar el nombre de quien publicó la receta y del que publicó el comentario. Así se deja a "usuarios.id_usuario" huérfano.
  #4 (permalink)  
Antiguo 29/07/2009, 10:42
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: sql consulta cruzada

Usa alias para las tablas.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #5 (permalink)  
Antiguo 29/07/2009, 11:00
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 4 meses
Puntos: 18
Respuesta: sql consulta cruzada

Cita:
Iniciado por flaviovich Ver Mensaje
Usa alias para las tablas.
Sí, eso es lo que he hecho, si te fijas.

Gracias.
  #6 (permalink)  
Antiguo 29/07/2009, 11:54
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 4 meses
Puntos: 39
Respuesta: sql consulta cruzada

Cuanto demora tu consulta?
Tienen indices tus tablas?
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #7 (permalink)  
Antiguo 29/07/2009, 12:06
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 4 meses
Puntos: 18
Respuesta: sql consulta cruzada

Segun los logs, una que devuelve 12 registros, 500 milisegundos. Y eso es uan barbaridad, porque imagínate si tiene que devolver 1000. Y sí, las tablas tienen índices.
  #8 (permalink)  
Antiguo 29/07/2009, 12:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 1 mes
Puntos: 2658
Respuesta: sql consulta cruzada

Cita:
Iniciado por trasgukabi Ver Mensaje
Segun los logs, una que devuelve 12 registros, 500 milisegundos. Y eso es uan barbaridad, porque imagínate si tiene que devolver 1000. Y sí, las tablas tienen índices.
El calculo de tiempo usado para una consulta no es una operación aritmética.
Con 500 milisegundos esto podría devolverte 12 registros o 12.000, según el caso. No pasa por la cantidad registros sino por la selectividad que se usa para obtenerlos.

¿Podrías describir el tipo de máquina, DBMS, y estructura de tablas que usas? También serviría saber lenguaje de programación que usas para acceder a los datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 29/07/2009, 12:25
Avatar de trasgukabi  
Fecha de Ingreso: septiembre-2004
Mensajes: 2.749
Antigüedad: 20 años, 4 meses
Puntos: 18
Respuesta: sql consulta cruzada

Hola, ahora ha empezado a ir bien, de repente,sin tocar nada. Y el cuello estaba en "SORTING RESULT"
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:10.