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

¿Posible o imposible?

Estas en el tema de ¿Posible o imposible? en el foro de Bases de Datos General en Foros del Web. Mi consulta y problema es un poco raro, pero creo que es posible: Tengo 2 tablas. Una de ellas pongamos que tiene esta estructura: ID ...

  #1 (permalink)  
Antiguo 13/09/2004, 11:52
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
¿Posible o imposible?

Mi consulta y problema es un poco raro, pero creo que es posible:

Tengo 2 tablas. Una de ellas pongamos que tiene esta estructura:

ID (Autonumérico) Nombre (Texto)

la otra tiene esta estructura:

ID1 (Autonumérico) - ID (Es el ID de la otra tabla) - Nombre2 (Texto)


Bien, el problema es este:

En la segunda tabla voy insertando una serie de caracterírticas relacionadas y asignadas a los valores de la primera tabla.
Por ejemplo, en la primera tabla hay 3 registros:

ID Nombre
1 coche
2 moto´
3 camión


En en la segunda tabla meto características de estos registros, ejemplo:

ID1 ID Nombre
1 2 rojas
2 2 monoplazas
3 3 verde
Etc...

Lo que necesito es poder hacer una selección de la primera tabla de todos los registros en los que coincidan los mismos valores de la segunda tabla.
Por ejemplo: Todas las motos que sean rojas y monoplazas.

¿Se puede hacer esto? Como sería?

Desde ya gracias a quien responda.

Salu2
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 13/09/2004, 12:25
Avatar de jrp01  
Fecha de Ingreso: mayo-2004
Ubicación: México
Mensajes: 2.702
Antigüedad: 20 años
Puntos: 0
Sonrisa

Podria ser algo asi

Select tabla1.id,tabla1.nombre,tabla2.nombre from tabla1 inner join tabla2 on(tabla1.id=tabla2.id) where tabla2.nombre like 'monoplazas'

Espero que sea lo que buscas Saludos
  #3 (permalink)  
Antiguo 13/09/2004, 13:01
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Gracias jrp01, pero a simple vista me parece que con ese código solo recogería el valor de un registro de la segunda tabla y necesito que reuna como condición los dos valores de la segunda tabla.

Ese es el problema, que debe tener como condición mínimo 2 valores...
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #4 (permalink)  
Antiguo 13/09/2004, 13:28
 
Fecha de Ingreso: enero-2003
Ubicación: Santiago de Chile
Mensajes: 35
Antigüedad: 21 años, 3 meses
Puntos: 0
No se si entendi bien tu pregunta pero no te sirve un simple "or" ?
algo asi como:
select dato1, dato2 from tabla1, tabla2
where
tabla1.id1=tabla2.id2 and
(tabla2.dato2 ='rojo' or tabla2.dato2 ='monopatin')
__________________
Nicko Luc
  #5 (permalink)  
Antiguo 13/09/2004, 14:30
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Creo que no tienes bien diseñada la base de datos, el tipo de vehículo (ej. 'monoplazas') y el color u otras carácterísticas (ej. 'roja') deberías separarlo intorducirlos en campos diferentes. De la forma que tú lo has hecho ¿como metes un monoplaza que sea rojo?
  #6 (permalink)  
Antiguo 13/09/2004, 14:45
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Gracias Nickoluc, con ese código lo que se obtendría es un resultado donde la condicíón no es que reuna las 2 condiciones (Que sea rojo y monopatín) si no que simplemente reuna una de ellas (O que sea rojo o que sea un monopatín).

Azteneta: Aparentemente puede parecer eso, pero es largo de explicar el funcionamiento de esta base de datos. Lo que hace esa tabla es añadir características a los registros de la primera tabla, además no son valores fijos (Unas veces puede ser el color, otras el tipo, otras la cilindrada, todo dinámico, ya que están relacionados con una tercera tabla que corresponde a la descripción y concepto de esa característica, en fin, es algo complejo.
De forma que un artículo de la primera tabla puede ser "rojo", "monoplaza", "mediano", etc... Pero en esa misma tabla se pueden añadir características de otro artículo de la primera tabla que nada tiene que ver con el primer artículo, y así con miles de artículos, como comprenderás no voy a hacer una tabla para cada artículo (No dispongo de la eternidad para hacerlo) y sus características, es mucho más sencillo utilizar una sola para todos.

Se trata de que todos los artículos de la primera tabla que tienen características similares almacenadas en la segunda tabla se puedan extraer en un recordset. Con 2 me basta.

Yo creo que se puede, estoy dando vueltas a hacerlo mediante un bucle, pero estoy confundido...

Gracias de nuevo!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #7 (permalink)  
Antiguo 14/09/2004, 05:48
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
SELECT tabla1.Id, tabla1.Mombre, cns.Caracteristica_1, cns2.Caracteristica_2 from tabla1, (SELECT id2, Nombre AS Caracteristica_1 FROM tabla2 WHERE dato2='rojo') cns, (SELECT id2, Nombre AS Caracteristica_2 FROM tabla2 WHERE dato2='monopatin') cns2
where
tabla1.id1=cns.id2 and tabla1.id1=cns2.id2
  #8 (permalink)  
Antiguo 14/09/2004, 06:42
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Gracias Azteneta, eso creo que si me puede servir, la única duda que me quedaría es como diferencio la primera caracteristica de la segunda. Lo que stoy haciendo es un array:

Dim valorr
FOR a = 0 TO UBOUND(valor)
valorr= valor(a)
NEXT


Con esto recogo al recorrer la segunda tabla los valores relacionados con el ´registro de la primera tabla, pero el problema es como separar y utilizar como variables ambos resultados, ya que si pongo un:

Dim valorr
FOR a = 0 TO UBOUND(valor)
valorr= valor(a)
NEXT
valorr=valorr

escribiendo valorr = valorr despues del array, este no recoge ya ningún dato, solo los recoge si esta incluido entre el FOR y el NEXT

Gracias de nuevo!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #9 (permalink)  
Antiguo 16/09/2004, 00:29
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
No entiendo bien la finalidad de el código anterior:
¿Lo que quieres es construir una consulta para poder buscar un número variable de características y después poder recogerlas en la página de resultados?
  #10 (permalink)  
Antiguo 16/09/2004, 01:40
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Te cuento con más detalle como funciona la base de datos:

En una tabla tengo los contenidos.
Estos tienen un ID autonumérico para evitar errores.

A cada tipo de contenido le puedo añadir características específicas solo para ese tipo de contenidos . Esto lo hago insertando la descripción de estas características en una tabla y luego los valores de cada característica en otra tabla diferente, relacionada con la segunda.

De esta forma consigo asignar una cantidad infinita de características, cada una de ellas relacionadas con un tipo de contenido, en tan solo 2 tablas, en una la descripción de las características, señalando a quien estan asignadas y en otra tabla ingreso los valores.

Esta estructura me es sumamente útil por razones largas de explicar. El problema es al sacar una estadística en la que, como comentaba, necesito saber todos los contenidos que reunen los mismos valores de ciertas características.

Te explico con un ejemplo:

TABLA I (Contenidos)
ID contenido tipo_contenido
1 pepe 2
2 manolo 2
3 juan 2
4 loro 3

TABLA II (Caracterisiticas)
ID_caracteristica nombre ID_tipo_contenido
1 color_pelo 2
2 color_ojos 2

TABLA III (Valores caracterisiticas)
ID_valor nombre_valor ID_caracterisitica ID_Contenido
1 castaño 1 1
2 castaño 1 2
3 azules 2 1
4 azules 2 2
5 verdes 2 3

En este supuesto lo que necesito es saber quienes tienen los ojos azules y el pelo castaño.

El funcionamiento de la consulta es el siguiente:

1.- Extraigo un contenido
2.- Extraigo las características y los valores relacionados a cada una de ellas de las 2 tablas correspondientes.

Para almacenar los valores de la tabla de VALORES lo hago mediante un array, en el que los guardo.

Después y como ultimo paso, a cada valor almacenado en el array le declaro una variable para diferenciarlo.
Entonces es cuando tengo que hacer la consulta estadística, pero claro, el problema es que los valores están en la misma columna y si le digo :

WHERE TABLAIII.NOMBRE_VALOR ='castaño'

luego no le puedo volver a decir que ese mismo campo (NOMBRE_VALOR) tiene que ser tambien 'azules', porque es lo que necesito, extraer los que son castaños y azules.

No sé si me he explicado, disculpa mi poca facilidad de palabra e ignorancia.

La verdad es que esto me tiene muy agobiado, porque toda la estructura de la base de datos me ha funcionado muy bien, y tengo metidos muchos datos.

pero no doy con ello
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #11 (permalink)  
Antiguo 16/09/2004, 01:47
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
En el código del array, el problema es que si declaras la variable después del NEXT no se recoge nada, los datos de las variables solo se recogen si están declaradas entre el For y el NExt.

El problema de esto es porque las características de cada contenido se leen primero como un barrido de la tabla correspondiente, para recoger todos los registros, lo hago mediante el array.

Estos datos que se almacenan en el array son las variables (Valores de las características) que tengo posteriormente que utilizar como condiciones en la consulta.

Sé que es algo liado y complicado y lo siento, (Como se suele decir, para lo fácil ya estoy yo solo), y lo peor es lo mal que me explico... Estoy completito y cagado por todas partes... Entre los problemas en el desarrollo y mi pésima capacidad de expresión... estoy jodido!!

Gracias de antemano!!
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #12 (permalink)  
Antiguo 16/09/2004, 03:18
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Me parece que ya he entendido algo. ¿Lo estás haciendo con asp?
  #13 (permalink)  
Antiguo 17/09/2004, 03:38
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Si, es ASP
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #14 (permalink)  
Antiguo 17/09/2004, 05:52
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Vamos a ver si al final podemos solucionarlo:

<%
Dim valores(100)
Dim I_valores
........
.........
'Supongamos que aquí ya has almacenado los valores y tienes la variable I_valores que es la cantidad de valores almacenados.

'Aquí damos el valor inicial del sql.
sql = "SELECT tabla1.Id, tabla1.Nombre FROM tabla1"

'En el For vamos creando la clausula FOR, la WHERE
C_For = ""
C_Where = ""
IFor = 1
For IFor=1 to I_valores
C_For = C_For & ", (SELECT id2 AS id_" & IFor & " FROM tabla2 WHERE dato2='" & valores(IFor) & "') cns_" & IFor
if IFor=1 then
C_Where = " WHERE tabla1.id1=cns_" & IFor & ".id_" & IFor
else
C_Where = C_Where & " AND tabla1.id1=cns_" & IFor & ".id_" & IFor
end if
Next

sql = sql & C_For & C_Where
%>

Creo que con este código puedes conseguir lo que pretendes. A partir de este ejemplo puedes complicarlo más. Por ejemplo podrías querer extraer campos de las subconsultas etc, el procedimiento sería el mismo, en otra variable almacenarías los campos.

Última edición por Atzeneta; 17/09/2004 a las 05:58
  #15 (permalink)  
Antiguo 17/09/2004, 05:54
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
He probado con este código, que la lógica me dice que debería de funcionar:



listado_sql_competidores = "SELECT " & _
" Content.ContentID, " & _
" Title " & _
" FROM (Content " & _
" LEFT JOIN ContentAttributeValues ON ContentAttributeValues.ContentId = Content.ContentID) "&_
" WHERE Display=1 AND PrevContentId is NULL"
" AND ContentAttributeValues.attr_value= '50cc' " & _
" AND ContentAttributeValues.attr_value= 'Ciclomotores Sport' "


Pero no funciona. Lo que le estoy ordenando es que me muestre todos los registros donde el ID_content de la tabla Content (Contenidos) sea el mismo que el ID_Content de la tabla ContentAttributeValues (Valor de los atributos de cada contenido).

Si el ID coincide (Pueden ser 2, 3, 4 o valores de esta tabla que estén asignados a un solo registro de la tabla Content) y reune un par de condiciones más (Que el contenido sea visible , display =1 y otra cosa), lo siguiente es que de la tabla ContentAttributeValues donde coincide el ID, seleccione los registros donde se contiene '50cc' y 'Ciclomotores Sport', pero aqui es donde se monta el "pollo", como son dos registros de la misma columna, no me muestra nada...

SOS SOS SOS
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #16 (permalink)  
Antiguo 17/09/2004, 05:59
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
¿Has probado el código que te he puesto en el mensaje anterior?
  #17 (permalink)  
Antiguo 17/09/2004, 06:03
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Una cosilla más, un pequeño pero penoso detalle, mi servidor de hosting tiene el MySQL (Dios mio, como lo odio), y el peazo de cab*** no soporta sentencias anidadas, esto limita toda la programación.

En el código que he escrito arriba lo que hago es meter el

" AND ContentAttributeValues.attr_value= "&variable

en el bucle del array, ya que es la condición a la que afecta directamente los valores que trae el array


Azteneta voy a probar lo que me comentas (Gracias)
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #18 (permalink)  
Antiguo 17/09/2004, 06:13
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Si no soporta consultas anidadas no te servirá el anterior código, entonces tendrás que construir el sql de la siguiente forma:

'Aquí damos el valor inicial del sql.
sql = "SELECT tabla1.Id, tabla1.Nombre FROM tabla1"

'En el For vamos creando la clausula FOR, la WHERE
C_For = ""
C_Where = ""
IFor = 1
For IFor=1 to I_valores
C_For = C_For & ", Tabla2 as cns_" & IFor
if IFor=1 then
C_Where = " WHERE tabla1.id1=cns_" & IFor & ".id2"
else
C_Where = C_Where & " AND tabla1.id1=cns_" & IFor & ".id2"
end if
C_Where_2 = C_Where_2 & " AND cns_" & IFor & ".dato2='" & valores(IFor) & "'"
Next

sql = sql & C_For & C_Where & C_Where_2
  #19 (permalink)  
Antiguo 17/09/2004, 06:20
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Azteneta, te lo agradezco mucho, voy a probarlo y te cuento, creo que eso si puede funcionar...

Recuerdame que te presente a mi hermana, está soltera, tiene 58 años, la cara llena de granos y mide 1,45 cms, pero me han dicho por ahí que se aplica mucho y que busca marido...
Sé que con esto no te compensaré el tiempo empleado en ayudarme, pero no sé como agradecertelo...

Gracias de verdad
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #20 (permalink)  
Antiguo 20/09/2004, 04:26
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Hola yomesmo ¿Te ha funcionado?
  #21 (permalink)  
Antiguo 20/09/2004, 04:32
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Hola Atzeneta, me acabo de poner con ello, voy a probarlo ahora, en unos 15 minutos te digo algo.

Gracias
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #22 (permalink)  
Antiguo 20/09/2004, 05:05
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Hola de nuevo, Azeneta, estoy probando con el código que me has pasado, epro estoy haciéndome un cacao de pelot*** al no trabajar con los nombres reales de las tablas. Te voy a pedir un gran favor, te pongo el nombre de las tablas y el de los campos reales, a ver si me puedes indicar el código con los datos reales, porque ya te digo, estoy probando y no funciona nada, pero creo que es por mi culpa, que me estoy liando con los nombres:

La tabla I se llama:

CONTENT
id_content title

(Esos son los campos necesarios para el select)

La tabla 2 se llama:

ContentAttributeValues
id attr_value id_content

(Estos son los atributos de cada contenido de la tabla I, cada atributo tiene un ID, luego su valor en texto (Ejemplo: 600 cc) y luego el id_content que es el id_content de la tabla content a la que está asignado cada registro de esta tabla que como ya sabes puede tener varios registros para un mismo registro de la tabla content.

lo primero Recogo los valores de la tabla ContentAttributeValues con un array como este:

valor =attr_value& "|" &valor
loop ' Paso al siguiente registro
'valor = split(valor,"|")

luego los recupero con esto:

FOR a = 0 TO UBOUND(valor)
Dim valorr,a
valorr= valor(a)
NEXT


No sé si con estos datos podrás ayudarme y pasarme el código exacto (El que me habias pasado pero adaptado a los nombres reales) que debería de utilizar, porque me estoy volviendo más tonto de lo que ya estaba, con tanto id1, id2 id_leches...

¡SOS! ¡SOS! ¡SOS!...

Gracias de nuevo...
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #23 (permalink)  
Antiguo 20/09/2004, 05:44
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Los valores los recoges de un formulario ¿No? Si los recoges de la tabla ContentAttributeValues ¿Qué criterios utilizas para filtrar? Porque… ¿No querras sacar todas las combinaciones posibles de atributos? Si es así es una “putada”.


De todas formas, te pongo el código con los nombres de tus campos y tus tablas. Si me equivocado en alguno o me he dejado algo, corrígelo tu mismo.


<%
Dim valores(100)
Dim I_valores
........
.........
'Supongamos que aquí ya has almacenado los valores y tienes la variable I_valores que es la cantidad de valores almacenados.

'Aquí damos el valor inicial del sql.
sql = "SELECT CONTENT.id_content, CONTENT.title FROM CONTENT"

'En el For vamos creando la clausula FOR, la WHERE
C_For = ""
C_Where = ""
IFor = 1
For IFor=1 to I_valores
C_For = C_For & ", ContentAttributeValues as cns_" & IFor
if IFor=1 then
C_Where = " WHERE CONTENT.id_content=cns_" & IFor & ".id_content"
else
C_Where = C_Where & " AND CONTENT.id_content=cns_" & IFor & ".id_content"
end if
C_Where_2 = C_Where_2 & " AND cns_" & IFor & ".attr_value ='" & valores(IFor) & "'"
Next

sql = sql & C_For & C_Where & C_Where_2
%>
  #24 (permalink)  
Antiguo 20/09/2004, 06:20
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Más lio...
Bueno, realmente lo que hago es que cuando un usuario ve la ficha de una moto, debajo se muestran los atributos específicos para esa moto (Por ejemplo, que sea de 600cc y que sea Sport) estos son los valores que almaceno en el array y con los que posteriormente tengo que hacer el Select de todas las motos de la tabla Content que tengan en la tabla Contentattributtesvalues los mismos valores que ese modelo de moto que el usuario está viendo (600cc y Sport), de esta forma lo que quiero es que cuando vea la ficha de una moto, pueda a la vez contemplar el listado de todas las que son similares y competidoras de la que está viendo (Le mostraría todas las que son de 600 cc y además son Sport). Este es el filtro en si mismo, no son tantas las motos de 600cc y sport, por poner un ejemplo.

Pero tengo una nueva duda
Recogo los valores con esto:

FOR a = 0 TO UBOUND(valor)
Dim valorr,a
valorr= valor(a)
NEXT

Valorr es la variable donde recogo el valor del campo.

¿Como debería de integrar este array clo que me has pasado, porque no tengo muy claro si el next de este array debería de ir al final de todo el código que me has enviado o antes. Igualmente sé que la cantidad de valores de un array se recogen con una coma y un valor numérico a continuación, pero no lo tengo muy claro?

Joder, me estoy agobiando, no quisiera abusar de ti, tio. Cuando ponga los créditos del portalmotos, te tengo que mencionar...
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #25 (permalink)  
Antiguo 20/09/2004, 06:48
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Espera a que haga un pequeño estudio de todo y dentro de un ratito te mandaré la programación tal y como yo la haría. Tranquilo, hoy estoy de vacaciones.
  #26 (permalink)  
Antiguo 20/09/2004, 07:10
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
Te mando el código tal y como yo lo haría:

<%
'Aquí recoges el valor del identificador del registro de la moto que tienes en la ficha (Independientemente de que sea en una página nueva con un querystring, el la misma página...)
id_content_ficha=...

'Creamos una conexión a la base de datos si no tenemos la conexión creada anteriormente.
Set oConn = ........

'Buscamos los atributos de la moto y, ya no hace falta almacenarlos en un array, de aquí mismo podemos extraer las cadenas.
sql = "SELECT * FROM ContentAttributeValues WHERE id_content=" & id_content_ficha
Ser obrs = oConn.Execute(sql)
obrs.MoveFirst
I_While = 0
While not obrs.EOF
I_While = I_While + 1
'vamos creando la claúsula FROM.
C_From = C_From & ", ContentAttributeValues as cns_" & I_While
'Vamos creando los filtros de búsqueda
if I_While=1 then
C_Where = " WHERE CONTENT.id_content=cns_" & I_While & ".id_content"
else
C_Where = C_Where & " AND CONTENT.id_content=cns_" & I_While & ".id_content"
end if
C_Where_2 = C_Where_2 & " AND cns_" & I_While & ".attr_value ='" & obrs("attr_value") & "'"
Wend
obrs.Close
Set obrs = Nothing

'Creamos la cadena de sql final.
sql = "SELECT CONTENT.id_content, CONTENT.title FROM CONTENT " & C_From & C_Where & C_Where_2

'En el sql ponemos el filtro para que no nos saque la moto que tenemos en la ficha:

sql = sql & " AND not CONTENT.id_content=" id_content_ficha
.........
.........
.........
%>

A partir de aquí, creo que ya tienes lo que buscabas. Si te da algún error en alguna línea dímelo para ver que es en lo que nos hemos podido equivocar. A veces pasa, al no tener posibilidad de prueba te equivocas en cualquier "chorrada".
  #27 (permalink)  
Antiguo 20/09/2004, 09:06
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
He probado el código, además me parece que efectivamente debería de funcionar, pero el servidor se queda colgado dando un error:

Tipo de error:
Páginas Active Server, ASP 0113 (0x80004005)
Se excedió el tiempo máximo de espera para una secuencia de comandos. Para cambiar este límite especifique un nuevo valor para la propiedad Server.ScriptTimeOut o cambie el valor en las herramientas de administración de IIS.
/www/content.asp

Esto me descoloca, se queda colgado con el bucle al generar el recordset, pero lo estoy revisando y no encuentro donde puede estar el error.

Este es código que utilizo:



sql = "SELECT * FROM ContentAttributeValues WHERE ContentId=832"' & to_sql(ContentId,"number") (He probado con un registro real, anulando la variable

set rs = cn.Execute(sql)
rs.MoveFirst
I_While = 0
While not rs.EOF
I_While = I_While + 1
'vamos creando la claúsula FROM.
C_From = C_From & ", ContentAttributeValues as cns_" & I_While
'Vamos creando los filtros de búsqueda
if I_While=1 then
C_Where = " WHERE CONTENT.ContentID=cns_" & I_While & ".ContentID"
else
C_Where = C_Where & " AND CONTENT.ContentID=cns_" & I_While & ".ContentID"
end if
C_Where_2 = C_Where_2 & " AND cns_" & I_While & ".attr_value ='" & rs("attr_value") & "'"
Wend
rs.Close
Set rs = Nothing

'Creamos la cadena de sql final.
listado_sql_competidores = "SELECT CONTENT.ContentID, CONTENT.title FROM CONTENT " & C_From & C_Where & C_Where_2

'En el sql ponemos el filtro para que no nos saque la moto que tenemos en la ficha:

listado_sql_competidores = listado_sql_competidores & " AND not CONTENT.ContentID=" & to_sql(ContentId,"number")

'De aqui en adelante abro la base de datos con este select y mostraría los resultados, pero no llega a este pùnto, se queda colgado ¿?
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #28 (permalink)  
Antiguo 20/09/2004, 10:06
 
Fecha de Ingreso: junio-2004
Ubicación: Castellón, España
Mensajes: 98
Antigüedad: 19 años, 10 meses
Puntos: 0
¡Perdóname! No me mates, es un error infaltil. Al ir deprisa, muchas veces me dejo lo más obvio. ¡Como no te iba a dar el error si no cambia el registro en el bucle...! el objeto rs nunca llega a ser EOF. Te he enviado el código de un bucle infinito.
Antes de Wend añade una línea, lo entenderás enseguida:

rs.MoveNext

Puede que te de otro error, pero éste es de lo más lamentable por mi parte.
  #29 (permalink)  
Antiguo 20/09/2004, 10:12
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Joder, pa haberse matao, yo támpoco me había percatao, estoy tan metido en lo "complicado" que en lo obvio ni me fijo...

Voy a probarlo...
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #30 (permalink)  
Antiguo 20/09/2004, 10:25
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 5 meses
Puntos: 1
Colecto, colecto, he cambiado un par de cosillas (El select tiene que reunir otras condiciones que no te envié para no liar más la cosa) y funciona tal y como dijo el Rey en una fábrica embutidos:

Le dijo un empleado: "Majestad como está el chorizo"

A lo que el Rey respondió:

"Con el perdón de la Reina, esto está cojonudo"

...

Pues eso digo yo...tio, esto me traía de cabeza desde hacía una semana, me tenía descolocao por completo...

Te lo agradezco muchísimo, de verdad, ya sabes que desde hoy tienes en el webmaster de www.portalmotos.com un amigo. (Espero que cuando tenga terminada la nueva versión del portal te des una vuelta, tus consejos me vendrán de maravilla y serán más que bienvenidos).

Para lo que necesites, estoy a tus ordenes...

Como decimos los moteros:

Un cordial saludo en V

Floren
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
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 17:56.