Ver Mensaje Individual
  #3 (permalink)  
Antiguo 15/02/2012, 07:49
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 meses
Puntos: 2658
Respuesta: Consulta SQL mal formulada [Resuelto]

En principio, CONCAT() e usa para crear una sola cadena de texto a partir de los valores que están en el paréntesis, y tu estás poniendo un sólo valore de cadena en ellos.
Siempre te conviene escribir la consulta en forma estructurada, ayuda a ver las metidas de pata:
Código MySQL:
Ver original
  1.     Products.id_product id,
  2.     Descrip.name title,
  3.     Descrip.meta_description description,
  4.     CONCAT("Salud y belleza > Asistencia sanitaria") google_product_category,
  5.     Cat.name category,
  6.     CONCAT("http://www.xxxxxxxx.com/",Cat.link_rewrite,"/",Products.id_product,"-",Descrip.link_rewrite,".html") link,
  7.     CONCAT("http://www.xxxxxxxx.com/",Products.id_product,"-",Images.id_image,"-thickbox/",Descrip.link_rewrite,".jpg") image_link,
  8.     CONCAT("nuevo") condition,
  9.     CONCAT("en stock") availability,
  10.     ROUND(((Products.price)*((tax.rate+100)/100))-Products.reduction_price,2) price,
  11.     Proveedores.meta_title brand
  12.     ps_product Products,
  13.     ps_product_lang Descrip,
  14.     ps_category_lang Cat,
  15.     ps_tax tax,
  16.     ps_image Images,
  17.     ps_supplier_lang Proveedores
  18. WHERE  
  19.     Products.id_product= Descrip.id_product
  20.     AND
  21.     Cat.id_category=Products.id_category_default
  22.     AND
  23.     tax.id_tax=Products.id_tax
  24.     AND
  25.     Products.id_product=Images.id_product
  26.     AND
  27.     Proveedores.id_supplier=Products.id_supplier
  28.     AND
  29.     Products.active = 1
  30. GROUP BY Products.reference

AL menos en tres de las columnas del SELECT usas CONCAT contra un sólo valor:
Código MySQL:
Ver original
  1.     ...,
  2.     CONCAT("Salud y belleza > Asistencia sanitaria") google_product_category,
  3.     ...,
  4.     CONCAT("nuevo") condition,
  5.     CONCAT("en stock") availability,
  6.     ...
  7.     ...
  8. WHERE  
  9.     ...

Las tres tienen el potencial de generar errores.
Además, hay algunos considerandos:
- Las cadenas de texto se deben encerrar entre apóstrfos (') y no entre comillas ("). Las comillas no son reconocidas en todos los servidores como texto, sino que suelen usarse para lo mismo que los acentos inversos (`): Nombres de campos, tablas y bases. Esto puede generar errores.
- No uses palabras en inglés puras en los nombres de las columnas, tablas, bases o alas. Puedes estar usando palabras reservadas sin saberlo, lo que generará errores no detectables. Abtes bien usa palabras combinadas con la raya (_). Es más habitual.
- El AS es opcional, y te conviene ya no usarlo. Es obsoleto y no aporta nada. De hecho ni el Oracle lo usa ya. Sólo se conserva por compatibilidad con DBMSs muy viejos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)