doulierong0334 2015-04-15 14:32 采纳率: 100%
浏览 23

mysql查询结果不如预期的prestashop

  I have some problem with mysql query.   Im trying to build table with all products ids, product names, manufacturers names and quantities per attribute in column per attribute    Getting ids and names is easy. Problem starts when I try to JOIN columns per attribute and fill it with quantities. Some attributes are not assinged to product therefore dont have id_stock_available (quantity) in ps_stock_available   In php code im getting attibutes ids from db into array. Than i build query based on that array.   I wont be pasting whole query as its 465 lines long (including spaces between lines). Will paste beginning, some part of middle query and the and.   If I run a query with just $i = 1 (t1.id_attribute1)

SELECT
    ps_2product_lang.id_product,
    ps_2product_lang.name,
    ps_2category_lang.name AS manufacturer_name,
    t1.id_attribute1

FROM ps_2product_lang

LEFT JOIN ps_2product
    ON ps_2product_lang.id_product = ps_2product.id_product

LEFT JOIN ps_2category_lang
    ON ps_2product.id_category_default = ps_2category_lang.id_category

LEFT JOIN ps_2category
    ON ps_2category_lang.id_category = ps_2category.id_category

JOIN
(
    SELECT
    ps_2stock_available.id_product AS id_product,
        ps_2stock_available.quantity AS id_attribute1

    FROM ps_2stock_available

    JOIN
        ps_2product_attribute_combination

    ON
        ps_2stock_available.id_product_attribute = ps_2product_attribute_combination.id_product_attribute

    WHERE
        ps_2product_attribute_combination.id_attribute = 1

    ORDER BY
        id_product
)
AS t1

ON
    ps_2product_lang.id_product = t1.id_product

WHERE ps_2product_lang.id_lang = 7
AND ps_2category_lang.id_lang = 7
AND ps_2product_lang.id_product > 12
AND (ps_2category.id_parent = 18 OR ps_2category.id_parent = 84)

ORDER BY
    manufacturer_name, name

i get products with id_attribute = 1 with column attribute1 filled with data (quantities)   Part below is being repeated in query as many times as there are attributes created in prestashop.

JOIN
(
    SELECT
    ps_2stock_available.id_product AS id_product,
        ps_2stock_available.quantity AS id_attribute1

    FROM ps_2stock_available

    JOIN
        ps_2product_attribute_combination

    ON
        ps_2stock_available.id_product_attribute = ps_2product_attribute_combination.id_product_attribute

    WHERE
        ps_2product_attribute_combination.id_attribute = 1

    ORDER BY
        id_product
)
AS t1

ON
    ps_2product_lang.id_product = t1.id_product

And now the more JOINs there are in query the less results i get from DB as if JOINs worked like ANDs.   As i mentioned already some attributes are not assigned to products therefore no quantities. In those id like to fillem with NULL value but i havent included that in query (i thought that JOIN will return nulls to query results)   What am I doing wrong?   Thanks a lot in advance

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 基于卷积神经网络的声纹识别
    • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
    • ¥100 为什么这个恒流源电路不能恒流?
    • ¥15 有偿求跨组件数据流路径图
    • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
    • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
    • ¥15 CSAPPattacklab
    • ¥15 一直显示正在等待HID—ISP
    • ¥15 Python turtle 画图
    • ¥15 stm32开发clion时遇到的编译问题