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

Comparación entre distintos recordsets???

Estas en el tema de Comparación entre distintos recordsets??? en el foro de ASP Clásico en Foros del Web. Muy wenas a tod@s de nuevo, a ver si me explico por que puede ser un poco lioso. Estoy trabajando sobre una tabla y kiero ...
  #1 (permalink)  
Antiguo 07/05/2003, 05:59
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Pregunta Comparación entre distintos recordsets???

Muy wenas a tod@s de nuevo, a ver si me explico por que puede ser un poco lioso. Estoy trabajando sobre una tabla y kiero ver la evolución de los datos a lo largo de varios años, por lo que en una página tengo un formulario en el que se pueden poner hasta 6 años y para cada año un trimestre, es decir, se puede consultar 1/2000, 2/2000, 3/2000.... y asi hasta 6 trimestres distintos. Hasta aki ningun problema, hago un recordset para cada trimestre y ya está, el problema es el siguiente, quiero que solo me saque aquellos registros cuyo identificador aparezca en todos los recordset, es decir, que si el identificador C3032A aparece en todos los trimestres con algun dato, me lo muestre, pero si solo sale en alguno de ellos, no, alguien se le ocurre como puedo hacerlo, por que a mi no se me ocurre que hacer, espero que alguien me pueda echar una mano.
Gracias por adelantado y hasta pronto, salu2
__________________
Vayamos por Partes :: Jack el Destripador
  #2 (permalink)  
Antiguo 07/05/2003, 09:00
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 7 meses
Puntos: 5
¿Por qué no haces la INTERSECCION de todas las consultas con ese identificador?

Suerte!
  #3 (permalink)  
Antiguo 07/05/2003, 09:04
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Y como se hacia lo de la intersección, por que ahora mismo no me acuerdo
Otra cosa, el identificador no es alguno específico, sino que de todos los resultados del primer recordset, que solo muestre aquellos que tb salen en el 2º, el 3º, el 4º, el 5º y el 6º y no tengo ni idea d como hacerlo
__________________
Vayamos por Partes :: Jack el Destripador
  #4 (permalink)  
Antiguo 07/05/2003, 09:19
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 7 meses
Puntos: 5
OK, a ver como te lo explico...

Recorres cada resultado de tu primer recordset con un bucle while. Por cada uno de esos registros obtienes el identificador que utilizaras para construir los oportunos SELECT del resto de recordsets.

Sólo te queda anidar todos esos SELECT con el operador INTERSECT.

Si el resultado devuelto es vacío, es porque uno de los SELECT no tiene ese identificador en sus registros.

El uso del operador INTERSECT no creo que varíe de una BD a otra ya que creo que es SQL estándar.

Anidarías los SELECT más o menos así:

(SELECT * FROM Tabla1) INTERSECT (SELECT * FROM Tabla2)

Olvida todo lo que te he dicho... He vuelto a leer tu consulta y creo que todos los recordsets los obtienes de la misma tabla pero se diferencian en el trimestre elegido.

Así que no te vale lo que te he dicho de la INTERSECCION

Dejame pensarlo un momento.
  #5 (permalink)  
Antiguo 07/05/2003, 09:28
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Exacto es todo de la misma tabla, y creo recordar que el intersect era para comparar busquedas de distintas tablas, no???
__________________
Vayamos por Partes :: Jack el Destripador
  #6 (permalink)  
Antiguo 07/05/2003, 09:43
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 7 meses
Puntos: 5
Así es.

Lo único que se me ocurre es que anides los bucles while. No te pongo el código exacto en ASP. Te lo pongo esquematico:

Código PHP:
sql1 "SELECT * FROM Tabla WHERE trimestre=1
result1=execute(sql1)

while not result1.eof
  id=result1("
ID")
  sql2 = "
SELECT FROM Tabla WHERE trimestre=AND id='" & id & "'"
  sql3= "
SELECT FROM Tabla WHERE trimestre=AND id='" & id & "'"
  sql4= "
SELECT FROM Tabla WHERE trimestre=AND id='" & id & "'"
  sql5= "
SELECT FROM Tabla WHERE trimestre=AND id='" & id & "'"
  sql6= "
SELECT FROM Tabla WHERE trimestre=AND id='" & id & "'"

  result2=execute(sql2)
  while not result2.EOF
    result3=execute(sql3)
    while not result3.EOF
      result4=execute(sql4)
      while not result4.EOF
        result5=execute(sql5)
        while not result5.EOF
          result6=execute(sql5)
          while not result6.EOF

            'Si llegas a entrar aquí, entonces estás seguro 
            'que ese id tiene datos en todos los trimestres

          wend
          result6.close
        wend
        result5.close
      wend
      result4.close
    wend
    result3.close
  wend
  result2.close
wend
result1.close 
Uuufff!!!

Espero que lo entiendas

Un beso
  #7 (permalink)  
Antiguo 07/05/2003, 09:52
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Si, algo parecido estaba pensando yo ahora mismo, supongo que lo que tengo que hacer es eso que me has puesto, y cuando llego al bucle más interno, mostrar los datos de los 6 recordset, no?? De está forma me irá recorriendo todos los recordset hasta el final y solo me mostrará aquellos cuyo identificador esté en todos.
Muchas gracias por todo Helbira y un gran abrazo
Ciao

Aunque se me acaba de ocurrir un pequeño problema con este método: no es obligatorio que introduzcan los 6 trimestres, pueden meter menos si quieren, y en ese caso, nunca llegaría al bucle más interno, asi que no me serviría de nada, no???
__________________
Vayamos por Partes :: Jack el Destripador
  #8 (permalink)  
Antiguo 07/05/2003, 10:03
Avatar de Helbira  
Fecha de Ingreso: octubre-2001
Ubicación: Sevilla, España
Mensajes: 1.228
Antigüedad: 22 años, 7 meses
Puntos: 5
No desesperes... no hay nada imposible.


Tengo alguna ideilla de como hacerlo pero no tengo mucho tiempo para depurarla...

Mas o menos consistiria en guardar en un array los trimestres seleccionados y recorrerlo con un bucle for para construir dinamicamente las sentencias SELECT correspondientes a esos trimestres sólo.

Además tendrás que hacer uso del número de registros devueltos por cada uno de esos recordset. En el momento que uno de esos totales sea 0 te sales del bucle for y a por el siguiente identificador con el mismo array de trimestres.

Sienot explicartelo tan mal, espero que hayas cogido la idea.

Un beso y suerte
  #9 (permalink)  
Antiguo 07/05/2003, 11:25
Avatar de angel_dope  
Fecha de Ingreso: noviembre-2002
Ubicación: Valencia
Mensajes: 737
Antigüedad: 21 años, 6 meses
Puntos: 8
Buf, ya veremos a ver como me lo monto, se supone que esto lo tenia q acabar hoy, pero como que no, por que aparte de esto, aun me kedan varias cosas por el estilo, asi que ya veremos lo que le cuento al jefe
No se, de alguna forma supongo que ya lo conseguiré, muchas gracias por toda tu ayuda Helbira, un beso, ciao

Me he dao cuenta de otra cosilla más, incluso si se introducen los 6 trimestres y se ejecuta, no es un forma muy efectiva de hacerlo, por que la tabla sobre la que se hace la búsqueda tiene unos 8000 registros, asi que si anido 6 bucles, exa la cuenta de cuantas pasadas salen, aproximadamente son 243.087.455.521.000.000.000.000 pasadas, y como que tarda un poco en hacerlo... Asi que na, da timeout, le he aumentado el tiempo para que lo dé, pero aun, asi lleva como unos 3 o 4 minutos procesando, puede q más, no stoy seguro, asi que tendré que buscar otra forma de hacerlo, pero no se cuaaaaal, que askito. El programa original estaba hecho en access y utilizaba una consulta, que a su vez usa una función, pero si intento acceder a esa búsqueda desde la pagina asp, da un error diciendo que la función no está definida en la consulta asi q no tengo ni idea de como hacerlo
__________________
Vayamos por Partes :: Jack el Destripador

Última edición por angel_dope; 07/05/2003 a las 11:25
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 22:27.