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

la consulta imposible?

Estas en el tema de la consulta imposible? en el foro de Bases de Datos General en Foros del Web. Hola amigos, a ver si me pueden dar una mano con esta consulta... Apenas la pensé me pareció que iba a ser sencilla, pero ahora ...
  #1 (permalink)  
Antiguo 23/08/2003, 10:23
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
Pregunta la consulta imposible?

Hola amigos, a ver si me pueden dar una mano con esta consulta...

Apenas la pensé me pareció que iba a ser sencilla, pero ahora estoy pensando en que no hay forma de hacerla...

Es asi, tengo una tabla con 3 campos:
t_categorias_contenido: id_contenido id_categoria proximidad

La proximidad es un entero de 1..3

La consulta tiene que recuperar en base a dos parametros ("categoria", "subcategoria") todos los registros (contenidos) que tengan id_categoria = "categoria" con proximidad 3 y todos los que tengan id_categoria = "subcategoria" con proximidad 1 o 2.

Estoy trabajando con mysql 3.23 y no soporta UNION de selects.

Parece simple pero, sera posible???

Muchas gracias desde ya, Martin

Última edición por mtroielli; 23/08/2003 a las 10:25
  #2 (permalink)  
Antiguo 23/08/2003, 10:33
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Hola Martin.

Lo veo tan facil que me temo que no he entendido muy bien tu pregunta. Te voy a responder lo que creo que debes hacer a riesgo de no haber comprendido tu pregunta.

SELECT *
FROM t_categorias_contenido
WHERE (id_categoria = par_categoria and proximidad = 3) or (id_categoria = par_subcategoria and proximidad = 2);

Si es eso, bien, sino, vuelve a exponer el problema a ver si me entero.

Saludos.
  #3 (permalink)  
Antiguo 24/08/2003, 12:09
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
Creo que no me he explicado bien....

lo que tengo que recuperar son todos los contenidos que tengan la "categoria" en proximidad 3 y la "subcategoria" en proximidad 2 o 1.

Ejemplo:

Parametros:
"categoria" = 4
"subcategoria" = 5

un registro:
id_contenido: 3
id_categoria: 4
proximidad: 3

otro registro:
id_contenido: 3
id_categoria: 5
proximidad: 2

Teniendo estos registros en la tabla, recuperaría el id_contenido 3 porque tiene la categoria 4 en proximidad 3 y la subcategoria 5 en proximidad 2.

Creo que no lo habia explicado de esta manera antes...

Gracias
  #4 (permalink)  
Antiguo 24/08/2003, 14:21
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Pues creo que es lo mismo que ha entendido Kaopectate, pero que se le olvido una condicion:

SELECT *
FROM t_categorias_contenido
WHERE (id_categoria = par_categoria and proximidad = 3) or (id_categoria = par_subcategoria and (proximidad = 2 or proximidad = 1));

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 24/08/2003, 22:13
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
Creo que no es lo que quiero precisamente... dado que esa consulta me devuelve contenidos que pueden ser distintos , y la idea es que el mismo contenido tenga en una determinada categoria proximidad 3 y en otra (subcategoria) proximidad 1 o 2...

Martin
  #6 (permalink)  
Antiguo 25/08/2003, 12:36
 
Fecha de Ingreso: agosto-2003
Ubicación: Argentina
Mensajes: 2
Antigüedad: 20 años, 8 meses
Puntos: 0
De acuerdo

Martin, no es tan dificil, lo que debes hacer es utilizar coherentemente los operadores AND y OR, como asi tambien los parentesis () , por ejemplo:
SELECT *
FROM tabla
WHERE ...y aqui comenzar a jugar con las condiciones.
por ejemplo si queres todos los registros donde el campo1 sea igual a 1 la condicion será:
campo1 = 1
-si ademas de esto queres que agregar otros campos para comparar, por ejemplo que el campo 1 sea 1 y el campo2 sea 100 o 200 la condicion será:
(campo1 = 1) AND (campo2=100 OR campo2=200)
y si ademas necesitas agregar otra mas para los casos en que campo1 sea igual a 1 y campo3 sea igual 999 debes poner lo siguiente:
((campo1 = 1) AND (campo2=100 OR campo2=200)) OR ((campo1 = 1) AND (campo3=999))

Espero que te sea de utilidad, salu2
  #7 (permalink)  
Antiguo 25/08/2003, 13:28
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Bueno, tomando como base lo que puso josemi, quedaría asi:

SELECT *
FROM t_categorias_contenido
WHERE (id_contenido = par_contenido) and ((id_categoria = par_categoria and proximidad = 3) or (id_categoria = par_subcategoria and (proximidad = 2 or proximidad = 1)));

Es decir:
- Trae de la tabla t_categorias_contenido los elementos cuyo id_contenido sea igual al parámetro par_contenido, y que cumplan una de las siguientes dos condiciones:

a) El id_categoria es igual al parámetro par_categoria y la proximidad es igual a 3

a) El id_categoria es igual al parámetro par_subcategoria y la proximidad es igual a 2 o a 1

Creo que es justo lo que necesitas.

Saludos.
  #8 (permalink)  
Antiguo 25/08/2003, 13:38
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Hola de nuevo mtroielli.

Luego de leer tu segundo hilo he entendido mejor. En primer lugar quiero decirte que no tenías que abrir un segundo hilo para el mismo tema porque creas confusión. Yo por ejemplo entro a algunos foros para revisar los hilos en los que he participado y muy facilmente me hubiese dado por satisfecho al ver que este hilo no ha avanzado mas.

En segundo lugar, te propongo otro query, esta vez usando un join de la tabla consigo misma. Seguro hay formas de escribir lo mismo mas eficientemente, pero esta te debería funcionar:

Código PHP:
SELECT 
 c
.*
FROM 
 t_categorias_contenido c
t_categorias_contenido s
WHERE 
 
(c.id_contenido s.id_contenido) and
 (
c.id_categoria par_categoria and c.proximidad 3) and
 (
s.id_categoria par_subcategoria and (s.proximidad or s.proximidad 1)); 
pruébala y dinos si te funciona (preferiblemente aqui mismo)

Saludos.
  #9 (permalink)  
Antiguo 25/08/2003, 19:23
 
Fecha de Ingreso: marzo-2003
Ubicación: Rosario, Argentina
Mensajes: 19
Antigüedad: 21 años, 1 mes
Puntos: 0
De acuerdo

Muchas gracias!!!!! era exactamente lo que necesitaba...

Sabia que por ahi andaba el tema... pero no sabia (o nunca se me habia ocurrido ) que se podian hacer joins a la misma tabla.

Muchas gracias de nuevo...
  #10 (permalink)  
Antiguo 26/08/2003, 12:53
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 22 años, 4 meses
Puntos: 38
Bueno saber que no era "imposible"...

Suerte.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 05:32.