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

Uno a varios pero en un sólo registro

Estas en el tema de Uno a varios pero en un sólo registro en el foro de ASP Clásico en Foros del Web. (Un título deplorable ) Supongamos lo siguiente: Tengo una tabla con usuarios y otra con URL's que están relacionados con la tabla usuarios. Cada usuario ...
  #1 (permalink)  
Antiguo 16/03/2004, 15:32
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Uno a varios pero en un sólo registro

(Un título deplorable )

Supongamos lo siguiente:

Tengo una tabla con usuarios y otra con URL's que están relacionados con la tabla usuarios. Cada usuario puede tener ninguna, una o varias URL's en su haber.

Seguimos suponiendo... En total hay 3 usuarios y entre todos hay 4 URL's:

- Pepito tiene 1 URL
- Daz no tiene URL's
- Juancito tiene 3 URL's

Al listar todos los usuarios, la tabla quedaría conformada por:

USUARIO | URL
Pepito | http://p.com/
daz | NULL
Juancito | http://j1.com/
Juancito | http://j2.com/
Juancito | http://j3.com/


Lo que pretendo es que al listar los usuarios diga: "Se han encontrado 3 usuarios" y que posteriormente "dibuje" una salida similar a esta:


Código:
Pepito:      http://p.com/
daz:         NULL
Juancito:    http://j1.com/
             http://j2.com/
             http://j3.com/

La pregunta es la siguiente... cómo me conviene hacerlo? Con un condicional que compare el usuario del registro actual con el del anterior y mientras sean iguales sólo genere la celda correspondiente a la columna de URL pero no la de usuario y además no incremente el contador (mientras que si son diferentes genere ambas celdas -usuario, URL- e incremente el contador) o se les ocurre alguna solución más práctica?

Es que en el ejemplo son pocos registros.. pero en la realidad podrían ser más de 2100 condicionales que se efectúen (un IF por cada registro del recordset).

Lo ideal sería hacer alguna query que me devuelva un recordset como el siguiente...

Código:
Pepito    http://pepito.com/
daz       NULL
Juancito  http://j1.com/,http://j2.com/,http://j3.com/


O sea... "juntar" en un sólo campo todas las URL's de un mismo usuario separadas por algún delimitador... pero no sé si es posible!

Última edición por AlZuwaga; 16/03/2004 a las 15:58
  #2 (permalink)  
Antiguo 16/03/2004, 17:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Distrito Federal
Mensajes: 225
Antigüedad: 21 años, 5 meses
Puntos: 0
Podrias usar la primera opcion, por lo regular yo asi le he hecho.
También podrias usar filtros, es decir hacer dos consultas, una que traiga todos los usuarios y otra con todos los urls, despues recorrer uno por uno los usuarios y aplicar un filtro a la consulta de urls, sin embargo, como mencionas que son muchos los registros, el desempeño de tu página no va a ser el mejor.
Otra opcion es que consultes a los usuarios los vayas recorriendo y por cada usuario hagas una consulta a la tabla con los urls, y a su vez recorras esa consulta. Esta opcion suena similar a la anterior pero en cuanto a desempeño es mucho mas rápida.
Alguna vez lo probe con miles de registros y el tiempo de procesamiento de la primera es mucho, pero mucho mayor que la segunda.

Saludos
  #3 (permalink)  
Antiguo 16/03/2004, 18:18
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
Si, la primera opción que decís -y también la que yo comenté: "Con un condicional que compare el usuario del registro actual con el del anterior..."-, es como generalmente suelo hacer este tipo de cosas.

Lo que me preguntaba si existía otra manera de hacerlo.

Voy a investigar un poco más acerca de las otras dos "similares" soluciones, pero a simple vista me parece más trabajoso para el servidor (porque son dos recordsets y por cada registro del primero "re-filtro" el segundo).

Igual estoy pensando seriamente en eliminar del "listado de usuarios" (que no son usuarios en realidad, pero continúo con las descripciones del ejemplo) ese tipo de información e incluirla solamente en su "mostrar más info de este ítem"

Saludos
__________________
...___...
  #4 (permalink)  
Antiguo 16/03/2004, 21:53
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años, 2 meses
Puntos: 535
mmm... siguiendo con la idea anterior de eliminar las URL's del "listado general de usuarios" lo que se me está ocurriendo, para facilitarle las cosas al navegante, es hacer un query que además de los datos "1 a 1" de cada "usuario", haga un COUNT de sus URL's... si el resultado del COUNT es 0, entonces pongo que no hay URL's... si es mayor a 0, le indico que en el "mostrar más info" se encuentran sus URL's.

Si bien sí o sí voy a hacer 2170 IF's (porque 2170 es el universo de "usuarios" y porque voy a hacer un IF por cada registro para comprobar el valor del COUNT), ese será el límite máximo de condicionales y no voy a estar preocupado porque el día de mañana crezca exponencialmente la cantidad de URL's para cada "usuario" (y en consecuencia los condicionales a efectuar)

Por el momento le voy a plantear esto a mi jefe a ver que opina (aunque a él le importa 4 cuernos el desempeño del servidor -y a mí 1 y medio jejeje-)

Igual sigo abierto a opiniones.
__________________
...___...
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:38.