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

Consulta SQL mal formulada [Resuelto]

Estas en el tema de Consulta SQL mal formulada [Resuelto] en el foro de Mysql en Foros del Web. Hola, he hecho esta consulta pero me da un error de sintaxis y no veo el porqué. Quizás alguien vea donde está el error. Gracias. ...
  #1 (permalink)  
Antiguo 15/02/2012, 05:57
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Consulta SQL mal formulada [Resuelto]

Hola, he hecho esta consulta pero me da un error de sintaxis y no veo el porqué. Quizás alguien vea donde está el error. Gracias.

Código:
SELECT Products.id_product AS id, Descrip.name AS title, Descrip.meta_description as description, CONCAT("Salud y belleza > Asistencia sanitaria") AS google_product_category, Cat.name AS category, CONCAT("http://www.xxxxxx.com/",Cat.link_rewrite,"/",Products.id_product,"-",Descrip.link_rewrite,".html") AS link, CONCAT("http://www.xxxxxxx.com/",Products.id_product,"-",Images.id_image,"-thickbox/",Descrip.link_rewrite,".jpg") as image_link, CONCAT("nuevo") AS condition, CONCAT("en stock") as availability, ROUND(((Products.price)*((tax.rate+100)/100))-Products.reduction_price,2) AS price,   Proveedores.meta_title as brand
FROM ps_product AS Products, ps_product_lang AS Descrip, ps_category_lang AS Cat, ps_tax AS tax, ps_image AS Images, ps_supplier_lang AS Proveedores
WHERE Products.id_product= Descrip.id_product AND Cat.id_category=Products.id_category_default AND tax.id_tax=Products.id_tax AND Products.id_product=Images.id_product AND Proveedores.id_supplier=Products.id_supplier AND Products.active = 1
GROUP BY Products.reference
Aquí os lo pongo en versión txt.

SELECT Products.id_product AS id, Descrip.name AS title, Descrip.meta_description as description, CONCAT("Salud y belleza > Asistencia sanitaria") AS google_product_category, Cat.name AS category, CONCAT("http://www.xxxxxxxx.com/",Cat.link_rewrite,"/",Products.id_product,"-",Descrip.link_rewrite,".html") AS link, CONCAT("http://www.xxxxxxxx.com/",Products.id_product,"-",Images.id_image,"-thickbox/",Descrip.link_rewrite,".jpg") as image_link, CONCAT("nuevo") AS condition, CONCAT("en stock") as availability, ROUND(((Products.price)*((tax.rate+100)/100))-Products.reduction_price,2) AS price, Proveedores.meta_title as brand
FROM ps_product AS Products, ps_product_lang AS Descrip, ps_category_lang AS Cat, ps_tax AS tax, ps_image AS Images, ps_supplier_lang AS Proveedores
WHERE Products.id_product= Descrip.id_product AND Cat.id_category=Products.id_category_default AND tax.id_tax=Products.id_tax AND Products.id_product=Images.id_product AND Proveedores.id_supplier=Products.id_supplier AND Products.active = 1
GROUP BY Products.reference

Última edición por TobyMudito; 15/02/2012 a las 06:16
  #2 (permalink)  
Antiguo 15/02/2012, 06:17
TobyMudito
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Consulta SQL mal formulada [Resuelto]

Misterios del SQL, si quito CONCAT("nuevo") AS condition de la consulta la sentencia funciona correctamente.

Ver para creer..
  #3 (permalink)  
Antiguo 15/02/2012, 07:49
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, 5 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)

Etiquetas: select, sql
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 00:59.