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

¿sabeis como puedo hacer esto?

Estas en el tema de ¿sabeis como puedo hacer esto? en el foro de ASP Clásico en Foros del Web. Tengo dos tablas de una base de datos: 1) EVENTOS -IDNOTICIA -TEXTO1 -TEXTO2 -sino1 2) EVENTOS_CAMPANAS -IDNOTICIA -TEXTO1 -TEXTO2 -sino1 Quiero mostrar los datos de ...
  #1 (permalink)  
Antiguo 02/06/2004, 16:31
 
Fecha de Ingreso: junio-2001
Mensajes: 58
Antigüedad: 23 años, 10 meses
Puntos: 0
¿sabeis como puedo hacer esto?

Tengo dos tablas de una base de datos:

1) EVENTOS

-IDNOTICIA
-TEXTO1
-TEXTO2
-sino1

2) EVENTOS_CAMPANAS

-IDNOTICIA
-TEXTO1
-TEXTO2
-sino1

Quiero mostrar los datos de campo 1 y campo 2 de ambas tablas pero que solo muestre dos resultados y la fecha mas reciente de ambas tablas, es decir realizar una consulta de las dos tablas recogiendo los dos primeros valores segun la fecha mas actual, para eso la consulta que he utilizado es la siguiente:

SELECT TOP 2 EVENTOS.IDNOTICIA, EVENTOS.TEXTO1, EVENTOS.TEXTO2, EVENTOS_CAMPANAS.IDNOTICIA, EVENTOS_CAMPANAS.TEXTO1, EVENTOS_CAMPANAS.TEXTO2 FROM EVENTOS, EVENTOS_CAMPANAS WHERE EVENTOS.SINO1= TRUE OR EVENTOS_CAMPANAS.SINO1= TRUE ORDER BY EVENTOS.FECHA1 OR EVENTOS_CAMPANAS.FECHA1 DESC

Pero me ocurre lo siguiente, cuando quiero recoger esos datos:

Primero solo me muestra los resultados de una tabla, creo que es porque utilizo el mismo nombre para los campos.

Segundo me muestra todos los resultados de la tabla y me los repite varias veces.

Tercero y mas importante no hace lo que yo quiero, comparar los datos de las dos tablas y mostrar solo los dos primeros resultados ya sea de una tabla, de la otra o de ambas, segun la fecha mas nueva.

A ver si me podeis echar una manitar por que estoy negro con esto, y seguramente lo estoy haciedo mal.

Gracias de antemano y un saludo
  #2 (permalink)  
Antiguo 02/06/2004, 18:15
Avatar de mozka  
Fecha de Ingreso: junio-2004
Ubicación: México
Mensajes: 37
Antigüedad: 20 años, 11 meses
Puntos: 0
para que puedas hacer lo que quieres, necesitas tener un campo comun en ambas tablas para que se puedan relacionar entre si

lo que te esta pasando ahi es que por cada dato en EVENTOS va a imprimir todos los datos de EVENTOS_CAMPANAS, creando lo que se llama un producto cartesiano
  #3 (permalink)  
Antiguo 03/06/2004, 02:34
Avatar de LeCLUB  
Fecha de Ingreso: abril-2003
Ubicación: Barcelona (España)
Mensajes: 205
Antigüedad: 22 años
Puntos: 1
Bueno, una forma sencilla de hacerlo es utilizando INNER JOIN.

Para ello, tendrías que cambiar el nombre de la tabla TEXTO1 y TEXTO2 de EVENTOS_CAMPANA por TEXTO3 y TEXTO4 respectivamente.

De esta forma te quedaría la BBDD así:

1) EVENTOS

-IDNOTICIA (autonumérico)
-TEXTO1 (campo texto)
-TEXTO2 (campo texto)

2) EVENTOS_CAMPANAS

-IDNOTICIA (campo numérico)
-TEXTO3 (campo texto)
-TEXTO4 (campo texto)

(en este ejemplo he quitado el sino1, así lo entenderás mejor)

Ahora bien, una vez cambiados los nombres de las tablas, tendrías que hacer la sentencia SQL de la siguiente forma:

Código:
SQL = "SELECT TOP 2 eventos.idnoticia, eventos.texto1, eventos.texto2, eventos_campana.texto3 , eventos_campana.texto4 FROM eventos INNER JOIN eventos_campana ON eventos.idnoticia = eventos_campana.idnoticia ORDER BY eventos.idnoticia DESC"
De esta forma, se mostrarán los 2 últimos eventos, y los 2 eventos_campanas que se hayan asignado a cada evento. Además, el Recordset tendrá los siguientes datos.

Rs("idnoticia") mostrará el dato de EVENTOS.IDNOTICIA
Rs("texto1") mostrará el dato de EVENTOS.TEXTO1
Rs("texto2") mostrará el dato de EVENTOS.TEXTO2
Rs("texto3") mostrará el dato de EVENTOS_CAMPANA.TEXTO3
Rs("texto4") mostrará el dato de EVENTOS_CAMPANA.TEXTO4

Por si te es de ayuda, te escribo un pequeño ejemplo:

Código:
<%@LANGUAGE="VBSCRIPT"%>
<%
Conexion = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath(".\eventos.mdb")
Set Conn = Server.CreateObject("ADODB.Connection")
set Rs = CreateObject("ADODB.Recordset")
Conn.open = Conexion
SQL = "SELECT TOP 2 eventos.idnoticia, eventos.texto1, eventos.texto2, eventos_campana.texto3 , eventos_campana.texto4 FROM eventos INNER JOIN eventos_campana ON eventos.idnoticia = eventos_campana.idnoticia ORDER BY eventos.idnoticia DESC"

rs.open SQL, Conn, 2,3

While not rs.EOF
response.write (" EVENTOS.IDNOTICIA: " & rs("idnoticia"))
response.write (" | EVENTOS.TEXTO1: " & rs("texto1"))
response.write (" | EVENTOS.TEXTO2: " & rs("texto2"))
response.write (" | EVENTOS.TEXTO3: " & rs("texto3"))
response.write (" | EVENTOS.TEXTO4: " & rs("texto4") & "<br>")
rs.MoveNext()
Wend

Rs.close
Conn.close
set Rs = Nothing
set Conn = Nothing
%>
Enga, un saludo

LeCLUB
  #4 (permalink)  
Antiguo 03/06/2004, 02:42
 
Fecha de Ingreso: junio-2001
Mensajes: 58
Antigüedad: 23 años, 10 meses
Puntos: 0
gracias lo probaré

gracias por resolverme esta papeleta, ya estaba un poco desesperdado, un saludo. y muchas gracias.
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 11:28.