Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/04/2008, 00:55
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Re: Consulta SQL complicada

Cita:
Iniciado por betus Ver Mensaje

Intento combinar la consulta original con la nueva tabla para obtener en el resultado los nuevos valores de la siguiente manera:

SELECT DISTINCT p.products_image, t.tag, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, IF s.status, s.specials_new_products_price, NULL) AS specials_new_products_price, IF (s.status, s.specials_new_products_price, p.products_price) AS final_price FROM products p, tags t LEFT JOIN specials s ON p.products_id = s.products_id, products_description pd, categories c, products_to_categories p2c WHERE p.products_status = '1' AND p.products_id = pd.products_id AND p.products_id = t.product_id AND pd.language_id = '3' AND p.products_id = p2c.products_id AND p2c.categories_id = c.categories_id AND ((pd.products_name LIKE '%gordo%' OR pd.products_description LIKE '%gordo%' OR t.tag LIKE '%gordo%')) ORDER BY pd.products_name DESC

PROBLEMA:
Se repiten los registros obtenidos un montón de veces a pesar que SELECT incorpora la cláusula DISTINCT.
EJ:
... tag__________products_id______products_name...
nuevo___________1_______________Manillar cromado
gordo____________1______________Manillar cromado
especial__________1______________Manillar cromado
gordo____________2______________Horquilla

Si hubieras dejado SELECT DISTINCT p.products_image y no hubieras puesto ningún otro campo detrás separado por comas, el resultado hubiera sido el esperado por lo que se refiere al DISTINCT, pues, según creo, el DISTINCT se vería afectado también por lo que sigue, en tu caso esos otros campos, y el distinct pierde el efecto que deseas. Pero en realidad, ese no es tu problema, sino el uso que haces de las relaciones en el LEFT JOIN
LEFT JOIN [/COLOR]specials s ON p.products_id = s.products_id, products_description pd, categories c, products_to_categories p2c [COLOR="purple"]WHERE
en el ON tienes que poner la equivalencia de dos campos (1 campo de una tabla con 1 de otra y no de 1 un campo de una tabla con 4 tablas, que es lo que creo has hecho).
Si quieres establecer más relaciones tendrás que enlazarlas con otros LEFT JOIN o tal vez mejor JOIN en tu caso (aunque para determinarlo tendrías que decirnos qué quieres sacar exactamente y la estructura de tus tablas), y siempre con campos de las tablas que estén relacionados, y 1 a 1; luego otro JOIN en el que otro campo de una de las tablas anteriores se relacione con otro de la siguiente y así sucesivamente; si no, acabarás haciendo un producto cartesiano relacionando todo con todo, o como parece estar ocurriéndote, uno con varios, y esos datos no te servirán de nada.
Es decir, respecto a las siguientes tablas no estableces relación con ninguna de las anteriores ni entre ellas, algo que tendrás que hacer si no quieres multiplicar los resultados...
products_description pd, categories c, products_to_categories p2c
con JOIN deberás unir por ejemplo el campo de products_description, imagino que su id, relacionado con otro campo de otra tabla, no sé cuál..., y luego otro inner join, y así sucesivamente.
A ver si es eso...

Última edición por jurena; 17/04/2008 a las 01:05