churu077 Posted June 23, 2011 Share Posted June 23, 2011 Hola a todos, tengo un problema relacionado con la base de datos de prestashop, el tema es que necesito hacer una sentencia sql que me muestre campos de varias tablas como nombre, precio, cantidad, y lo mas importante y donde tengo el error que me muestre la categoría de cada producto.Mi consulta sql es la siguiente:SELECT ps_product.id_product, ps_product_lang.description, description_short, ps_product_lang.name, price, quantity, ps_category_lang.name AS categoriaFROM ps_productINNER JOIN (ps_product_langINNER JOIN ps_category_lang ON ps_product_lang.id_lang = ps_category_lang.id_lang) ON ps_product.id_product = ps_product_lang.id_productEsto me muestra todos los productos tantas veces como categorías tengo, me explico no asigna a cada articulo su categoría, sino que me repite la categoría tantas veces como productos tengo y eso me crea una lista inmensa de artículos repetidos. Yo lo que quisiese es que para cada articulo mostrase su categoría correspondiente, pero soy un poco inexperto en este tema y no le encuentro solución. Si alguien me pudiese dar aunque solo fuese una orientación de como solucionar esto me seria de gran ayuda.Gracias de antemano!!! Link to comment Share on other sites More sharing options...
shacker Posted June 26, 2011 Share Posted June 26, 2011 te falta la opcion group by, que te permite agruparlos por ID por ejemploGROUP BY ps_product.id_product Link to comment Share on other sites More sharing options...
churu077 Posted June 27, 2011 Author Share Posted June 27, 2011 Gracias por responder con tu solucion la sentencia sql se queda de la siguiente manera:SELECT ps_product.id_product, ps_product_lang.description, description_short, ps_product_lang.name, price, quantity, ps_category_lang.name AS categoriaFROM ps_productINNER JOIN (ps_product_langINNER JOIN ps_category_lang ON ps_product_lang.id_lang = ps_category_lang.id_lang) ON ps_product.id_product = ps_product_lang.id_productGROUP BY ps_product.id_productPero asi lo que me pasa es que no me repite los articulos tantas veces como categorias tenga, pero me muestra todos los articulos con la categoria asignada "home", y yo lo que quiero es que para cada producto me muestre su categoria correspondiente.Gracias por la respuesta!!! Pero sigo necesitando ayuda Link to comment Share on other sites More sharing options...
shacker Posted June 27, 2011 Share Posted June 27, 2011 claro, entonces tienes muchos en home.entonces esta mal la sentencia. el primer select debe ser From category_product, que tiene los productos por categorias Link to comment Share on other sites More sharing options...
churu077 Posted June 27, 2011 Author Share Posted June 27, 2011 Gracias por la contestacion me esta siendo de gran ayuda, haciendolo asi me sale el id de cada categoria correspondiente a cada producto, lo cual me lo hace bien, pero yo lo que necesito es el nombre de la categoria, se me ocurre que tendre que utilizar otro INNER JOIN pera enlazar la tabla ps_category_producy y la tabla ps_category_lang que es donde estan los nombres de las categorias, pero no se como incorporar otro INNER JOIN a la sentencia que de momento esta asi:SELECT ps_product.id_product, ps_product_lang.description, description_short, ps_product_lang.name, price, quantity, ps_category_product.id_category AS categoriaFROM ps_category_productINNER JOIN (ps_product_langINNER JOIN ps_product ON ps_product_lang.id_product = ps_product.id_product) ON ps_category_product.id_product = ps_product_lang.id_productGROUP BY ps_product.id_productDe esta manera me muestra el id de cada categoria correspondiente a cada producto, pero yo quiero el nombre, si me dieseis una ultima ayuda para sacarlo me sacariais de un gran apuro. Gracias de antemano de nuevo!!Un saludo a todos!! Link to comment Share on other sites More sharing options...
shacker Posted June 29, 2011 Share Posted June 29, 2011 es que el lenguaje esta en otra table, es el category_lang, que contiene los nombresdebes hacer un join a esta table con el que tiene el id de categoria., por ejemplo cl.`name` AS category_defaulty LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (p.`id_category_default` = cl.`id_category` AND cl.`id_lang` = '.intval($id_lang).')el id lang es para que tome el idioma del usuario Link to comment Share on other sites More sharing options...
Recommended Posts