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

[SOLUCIONADO] Consulta por inner join y find in set

Estas en el tema de Consulta por inner join y find in set en el foro de Bases de Datos General en Foros del Web. Hola, Buenos días, Tardes, Noches. Solicito colaboración con una consulta que estoy intentando hacer en una BD, pero no me resulta como debería y no ...
  #1 (permalink)  
Antiguo 29/06/2012, 09:01
 
Fecha de Ingreso: enero-2012
Ubicación: En una casa
Mensajes: 72
Antigüedad: 12 años, 3 meses
Puntos: 2
Exclamación Consulta por inner join y find in set



Hola, Buenos días, Tardes, Noches.

Solicito colaboración con una consulta que estoy intentando hacer en una BD, pero no me resulta como debería y no entiendo por que :( ... la consulta es la siguiente:

Código SQL:
Ver original
  1. SELECT DISTINCT products_prd.id_prd, products_prd.sku_prd, products_prd.idctg_prd, products_prd.name_prd, products_prd.description_prd, products_prd.money, products_prd.price_prd, products_prd.visible_prd, products_prd.image_hlg_prd FROM products_prd INNER JOIN categories_ctg ON FIND_IN_SET(categories_ctg.id_ctg, products_prd.idctg_prd, categories_idctg_ctg) WHERE (categories_ctg.id_ctg != 107 OR categories_ctg.idctg_ctg != 23 OR categories_ctg.idctg_ctg != 107) AND products_prd.visible_prd =1 AND highlight_home_prd = 1 AND (date_publication <= NOW() OR date_publication IS NULL) AND (date_end >= NOW() OR date_end IS NULL)

Con esta consulta puedo destacar unos X contenidos; ahora lo que sucede es que otros contenidos que no deberían estár destacados se me están pasando porque cuentan con 2 id relacionados... ejemplo, acá digo que me muestre todo lo que sea diferente a los ID ''idctg_ctg y id_ctg 107 y 23'', pero en una tabla (products_prd) tengo 3 contenidos que cuentan con el idctg_prd 107, 108 | 107, 109 y 107, 110... no entiendo por qué me los trae si su id_ctg es diferente y lo único que detecto es esto que se encuentran estos idctg_prd en el mismo campo, esto se hace para diferenciar los contenidos A y los contenidos B ejemplo: A interacionales, B nacionales... el idctg_ctg != 107 es para que me muestre lo internacional... pero no entiendo porque los trae o qué debo hacer para que no los muestre o los excluya :(... Alguien puede por favor, POR FAVOR brindarme una colaboración

Gracias
__________________
Aprendo, Aprendo Aprendo :D A la filosofía de Golden Boy ^^,
Desarrollo Web en Colombia

Última edición por pato_cuack; 29/06/2012 a las 09:10
  #2 (permalink)  
Antiguo 29/06/2012, 12:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta por inner join y find in set

Francamente no tengo idea de dónde puedes haber sacado un ejemplo de uso del INNER JOIN utilizando FIND_IN_SET()... Porque ni siquiera tienen cómo relacionarse.

FIND_IN_SET() devuelve , al menos en MySQL, un valor entero positivo que representa la posición en que un valor A se encuentra dentr de un vlaor B, siendo el valor B una cadena de texto con valores separados por comas ('1, 2, 56, 98, 0').
Cómo puedes encajar eso en un INNER JOIN me cuesta entenderlo.
Si fuese que el campo de busqueda es un VARCHAR, que contiene un conjunto de valores separados por comas, eso sería uncampo multivaluado, y ya deberías saber que esos campos están prohibids en las bases de datos relacionales. Son un atentado a la integridad referencial y a la consistencia de datos, además de dar resultados erráticos en las consultas.

En definitiva, tu consulta (poniendo los alias que no pusiste), quedaría mas o menos así:
Código MySQL:
Ver original
  1.     DISTINCT
  2.     P.id_prd,
  3.     P.sku_prd,
  4.     P.idctg_prd,
  5.     P.name_prd,
  6.     P.description_prd,
  7.     P.money,
  8.     P.price_prd,
  9.     P.visible_prd,
  10.     P.image_hlg_prd
  11.     products_prd P
  12.     INNER JOIN categories_ctg C ON FIND_IN_SET(C.id_ctg, P.idctg_prd, C.idctg_ctg)
  13.     (C.id_ctg != 107 OR C.idctg_ctg != 23 OR C.idctg_ctg != 107)
  14.     AND P.visible_prd =1
  15.     AND highlight_home_prd = 1
  16.     AND (date_publication <= NOW()
  17.     OR date_publication IS NULL)
  18.     AND
  19.     (date_end >= NOW() OR date_end IS NULL)
Pero para poder darte una sugerencia tenemos que revisar ese JOIN que has creado, y volverlo algo coherente y lógico.
¿Puedes explicar mejor cuáles son los campos que se relacionan entre ambas tablas y cómo lo hacen?
Porque tal pareciera que tienes categorías con subcategorías, y cada producto pertenece a una u otra.
¿Es así?
Si eso es lo que tienes, la consulta está mal escrita, porque para realizara con ese esquema la tabla de categorías se debe invocar dos veces, de modo de recrear la relación consigo misma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 29/06/2012, 12:54
 
Fecha de Ingreso: enero-2012
Ubicación: En una casa
Mensajes: 72
Antigüedad: 12 años, 3 meses
Puntos: 2
Respuesta: Consulta por inner join y find in set

--' Gracias por tu respuesta...

El caso es que ya logré resolverlo, solo me hacía falta poner una condición --'' , de igual manera agradezco tu pronta respuesta y tu explicación...

PDT: no mencioné en algún momento INNER JOIN con FIND_IN_SET... la diferecia fue el con yo mencioné Y... pero igual creo que está mal planteada esta consulta de parte mía =)

Cerrar tema por favor =)

GRACIAS.
__________________
Aprendo, Aprendo Aprendo :D A la filosofía de Golden Boy ^^,
Desarrollo Web en Colombia

Etiquetas: bd, find, join, set, tabla, campos
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 08:56.