Foros del Web » Programando para Internet » ASP Clásico »

Union entre tablas

Estas en el tema de Union entre tablas en el foro de ASP Clásico en Foros del Web. Hola muy buenas. Bueno os comento mi problema. Tengo una base de datos access que tiene esta estructura. Cita: tabla correos id Correo Tabla noticias ...
  #1 (permalink)  
Antiguo 31/08/2011, 14:16
Avatar de Batan  
Fecha de Ingreso: septiembre-2010
Ubicación: Madrid
Mensajes: 408
Antigüedad: 13 años, 7 meses
Puntos: 63
Union entre tablas

Hola muy buenas.
Bueno os comento mi problema.
Tengo una base de datos access que tiene esta estructura.
Cita:
tabla correos
id
Correo

Tabla noticias
id
noticias

Tabla correosNoticias
idCorreo
idNoticias
Tengo una pequeña aplicacioón que manda un mail con las noticas a los correos que se sucribe cada usuario. Uno las tablas mediante de este modo
Código SQL:
Ver original
  1. SELECT palabras.palabra FROM palabras INNER JOIN (correos INNER JOIN correosPalabras ON correos.id = correosPalabras.idCorreo) ON palabras.Id = correosPalabras.idPalabra WHERE correos.id = correosPalabras.idCorreo

Mi código hasta el momento es este
Código ASP:
Ver original
  1. Set rs = cn.execute("SELECT correo FROM correos WHERE correos.id IN (SELECT correosPalabras.idCorreo FROM correosPalabras)")
  2. do while not rs.eof
  3.     response.write rs("correo") & " ha recibido "
  4.     set rs2 = cn.execute("SELECT palabras.palabra FROM palabras INNER JOIN (correos INNER JOIN correosPalabras ON correos.id = correosPalabras.idCorreo) ON palabras.Id = correosPalabras.idPalabra WHERE correos.id = correosPalabras.idCorreo")
  5.     do while not rs2.eof
  6.         response.write rs2("palabra")
  7.     rs2.movenext
  8.     loop
  9. rs.movenext
  10. response.write "<br />"
  11. loop
Primero llamo a los correos que vayan a recibir noticias.
Despues por cada correo recorro las noticias a las que estan suscritos y mando un mail.

Mi problema esta en que manda las noticias, pero manda cada noticia segun el número de usuarios suscritos a esa noticia, o algo menos eso creo, por todas las pruebas que hice. Creo que la sentencia de para unir las tablas las tengo mal echa, podria ser ese el problema?

Gracias por su tiempo, saludos
  #2 (permalink)  
Antiguo 05/09/2011, 22:57
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Union entre tablas

Hola Batan

Tendrías que explicar un poco mas tu estructura porque veo que comienzas con 3 tablas y luego hay otra tabla "palabras" involucrada...según lo que entiendo es esto:

corrreos -> contiene las direcciones de correo electrónico
noticias -> contiene las noticias a enviar
correosNoticias -> contiene la relación de los correos suscritos a noticias

Si lo anterior es cierto solo necesitas unir esas tablas:

Código SQL:
Ver original
  1. SELECT a.id FROM correos a INNER JOIN correosNoticias b ON a.id = b.idCorreo INNER JOIN noticias c ON b.id = c.idNoticias

A ver si eso te sirve.


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #3 (permalink)  
Antiguo 06/09/2011, 22:47
Avatar de Batan  
Fecha de Ingreso: septiembre-2010
Ubicación: Madrid
Mensajes: 408
Antigüedad: 13 años, 7 meses
Puntos: 63
Respuesta: Union entre tablas

Gracias U_goldman.

Si tuve un fallo al explicarme, pues lo de la tabla palabras es para despues

Esta seria la segunda sentencia que hago
Código SQL:
Ver original
  1. SELECT noticias.noticia FROM noticias INNER JOIN (correos INNER JOIN correosNoticias ON correos.id = correosNoticias.idCorreo) ON noticias.Id = correosNoticias.idNoticias WHERE correos.id = correosNoticias.idCorreo"


La query que dijiste estaba bien, pero necesito que al mandar el mail, mande un mail a cada correo con sus noticias particulares.
Por ejemplo:
Si en la tabla correos hay correos: 1, 2 y 3
Si en la tabla noticias hay noticias: 1, 2 y 3
Y en la tabla correosNoticias decido que noticias envio a cada correo: 1|2, 1|3, 2|1, 2|2, 2|3, 3|2, 3|3.

Al correo 1 le deberia llegar:
correo1 llega noticia2 y noticia3

Al correo 2 le deberia llegar:
correo2 llega noticia1, noticia2 y noticia3

Al correo 3 le deberia llegar:
correo3 llega noticia2 y noticia3


Mi error
Cuando creo mi bucle manda los mensajes, pero en cada mensaje le llega un duplicado de la noticia. es decir, le llega algo asi.
correo1 llega noticia2
correo1 llega noticia2
correo1 llega noticia3
correo1 llega noticia3


quiero hacer un controlador para solo mandar una noticia pero nose como.
Espero haberme explicado.
Saludos
  #4 (permalink)  
Antiguo 11/09/2011, 19:22
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 22 años, 3 meses
Puntos: 98
Respuesta: Union entre tablas

Cita:
La query que dijiste estaba bien, pero necesito que al mandar el mail, mande un mail a cada correo con sus noticias particulares.
Por ejemplo:
Si en la tabla correos hay correos: 1, 2 y 3
Si en la tabla noticias hay noticias: 1, 2 y 3
Y en la tabla correosNoticias decido que noticias envio a cada correo: 1|2, 1|3, 2|1, 2|2, 2|3, 3|2, 3|3.
Hola Batan, la consulta que hicimos no te sirve para eso, cuál es el resultado que te arroja?
Probaste solo agregando el campo de noticias al query?


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #5 (permalink)  
Antiguo 13/09/2011, 01:43
Avatar de Batan  
Fecha de Ingreso: septiembre-2010
Ubicación: Madrid
Mensajes: 408
Antigüedad: 13 años, 7 meses
Puntos: 63
Respuesta: Union entre tablas

Buenas y gracias por responder.
El resultado que me arroja con la query que me dejaste es:
Me da los mismos resultados, un mensaje por cada noticia y pues lo que quiero es un mensaje con todas sus noticas.

Saludos
  #6 (permalink)  
Antiguo 01/10/2011, 04:36
Avatar de Batan  
Fecha de Ingreso: septiembre-2010
Ubicación: Madrid
Mensajes: 408
Antigüedad: 13 años, 7 meses
Puntos: 63
Respuesta: Union entre tablas

Habia dejado un poco el tema y cuando bueno pense que haber que pasaria si comparo la id de los correos con la idCorreo de la tabla correosPalabras,

Código ASP:
Ver original
  1. 'Con dos query me traigo los registros de las dos tablas. Y creo las conexiones correspondientes
  2.  
  3. do while not rs.eof
  4.     response.write rs("correo") & ": "
  5.     do while not rs2.eof
  6.                 if rs("id") = rs2("idCorreos") then
  7.         response.write rs2("idCorreo") & ","
  8.                 end if
  9.     rs2.movenext
  10.     loop
  11.     response.write "<br />"
  12. rs.movenext
  13. loop
Bueno al hacerlo solo me traia bien las los registros del primer id de los correos
pero los demas correos se quedaban vacio, como si ya no pasase por el bucle.
Me quedaba esto:
correo1: 1,1,1
correo2:
correo3:
...

Y decidi ver si me llegaban bien los registros asi que hice un simple
Código ASP:
Ver original
  1. do while not rs.eof
  2.     response.write rs("correo") & ": "
  3.     do while not rs2.eof
  4.         response.write rs2("idCorreo") & ","
  5.     rs2.movenext
  6.     loop
  7.     response.write "<br />"
  8. rs.movenext
  9. loop

Para que me mostrase todos los registros de idCorreos con las id de correo
Y pasa lo mismo solo me muestra la del primero correo y las demas las deja en blanco como si no pasase por el segundo bucle.

Saludos
  #7 (permalink)  
Antiguo 02/10/2011, 16:10
Avatar de Batan  
Fecha de Ingreso: septiembre-2010
Ubicación: Madrid
Mensajes: 408
Antigüedad: 13 años, 7 meses
Puntos: 63
Respuesta: Union entre tablas

Bueno pues al fin lo conseguí despues de 5 horas seguidas pensando... aunque creo que no es el mejor modo, por el momento me sirve iré pensando en algo menos laborioso...

Código ASP:
Ver original
  1. Set rs = cn.execute("SELECT * FROM correos")
  2.  
  3. do while not rs.eof
  4.         response.write "El correo " & rs("correo") & " ha recibido las siguientes noticias"
  5.         set rs2 = cn.execute("SELECT * FROM noticias")
  6.     do while not rs2.eof
  7.         set rs3 = cn.execute("SELECT * FROM correosNoticias")
  8.         do while not rs3.eof
  9.               if rs("id") = rs3("idCorreo") and rs2("idP") = rs3("idNoticia") then
  10.                             response.write rs2("noticia") & ","
  11.               end if
  12.         rs3.movenext
  13.         loop
  14.     rs2.movenext
  15.     loop
  16.         response.write "<br />"
  17. rs.movenext
  18. loop

Espero que le sirva a alguien.
Gracias y saludos

Etiquetas: tablas, union
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 15:58.