【问题标题】:Combining two mysql results结合两个mysql结果
【发布时间】:2014-03-14 15:44:30
【问题描述】:

我有两个多连接查询。 1 用于来自“会话”表的产品,另一个用于来自“包装”表的产品。这两个查询都必须加入我的 order 和 order_items 表。

在我们的订单列表网页中,单个订单应如下所示:

|order id  |  products|
|123       |  A2,PKG1 |

每个单独的查询组连接产品,但我如何对来自两个不同连接查询的连接产品进行分组?

我最初的想法是连接表,但我的同事说只使用对象。

我真的不想编写代码/构造对象,因为产品只是为了展示。

任何人都可以提出快速简单的建议吗?除了连接表或使用对象之外的任何内容。

这是我的 2 个查询:

会话: 选择 ats_store.order.payment_type,production_www.paypal_transactions.createdOn 作为 order_date,production_www.paypal_transactions.FIRSTNAME 作为名字, production_www.paypal_transactions.LASTNAME 作为姓氏,ats_store.order.id 作为 order_id,ats_store.order.customerid,ats_store.order.shipping_address_id,ats_store.order.status,ats_store.order_items.product_id,ats_store.shipping_address.country 作为国家,ats_store。 shipping_address.street_1 作为 street1,ats_store.shipping_address.street_2 作为 street2,ats_store.shipping_address.street_3 作为 street3,ats_store.shipping_address.city 作为城市,ats_store.shipping_address.state_and_province 作为州,ats_store.shipping_address.zip_code 作为 zip,GROUP_CONCAT(production_cache_salesforce_repl. ats_conference_session__c.Name order by production_cache_salesforce_repl.ats_conference_session__c.Sort_Code__c) 作为产品,production_cache_salesforce_repl.ats_conference_session__c.Sort_Code__c 来自 ats_store.order 左加入 ats_store.shipping_address on ats_store.shipping_address.id = ats_store.order.shipping_address_id 内部加入 ats_store.order_items on ats_store.order_items.order_id = ats_store.order.id INNER JOIN production_cache_salesforce_repl.ats_store_price__c price ON price.Id = ats_store.order_items.product_id 加入 production_cache_salesforce_repl.ats_conference_session__c ON production_cache_salesforce_repl.ats_conference_session__c.Id = price.ATS_Conference_Session__c 左加入 production_www.paypal_transactions ON production_www.paypal_transactions.id = ats_store.order.paypal_transaction_id 其中 ats_store.order.shipping_address_id != -1 和 production_www.paypal_transactions.COMMENT1 = 'ATS 网上商店' 和 production_www.paypal_transactions.RESPMSG = '已批准' 按 ats_store.order.id 分组 按 order_date 排序

包: 选择 ats_store.order.payment_type,production_www.paypal_transactions.createdOn 作为 order_date,production_www.paypal_transactions.FIRSTNAME 作为名字, production_www.paypal_transactions.LASTNAME 作为姓氏,ats_store.order.id 作为 order_id,ats_store.order.customerid,ats_store.order.shipping_address_id,ats_store.order.status,ats_store.order_items.product_id,ats_store.shipping_address.country 作为国家,ats_store。 shipping_address.street_1 作为 street1, ats_store.shipping_address.street_2 作为 street2,ats_store.shipping_address.street_3 作为 street3,ats_store.shipping_address.city 作为城市, ats_store.shipping_address.state_and_province 作为州,ats_store.shipping_address.zip_code 作为 zip, GROUP_CONCAT(production_cache_salesforce_repl.ats_store_package__c.Package_Code__c order by production_cache_salesforce_repl.ats_store_package__c.Package_Code__c) 作为产品 来自 ats_store.order 左加入 ats_store.shipping_address on ats_store.shipping_address.id = ats_store.order.shipping_address_id 内部加入 ats_store.order_items on ats_store.order_items.order_id = ats_store.order.id INNER JOIN production_cache_salesforce_repl.ats_store_price__c price ON price.Id = ats_store.order_items.product_id 加入 production_cache_salesforce_repl.ats_store_package__c ON production_cache_salesforce_repl.ats_store_package__c.Id = price.ATS_Store_Package__c 左加入 production_www.paypal_transactions ON production_www.paypal_transactions.id = ats_store.order.paypal_transaction_id 其中 ats_store.order.shipping_address_id != -1 和 production_www.paypal_transactions.COMMENT1 = 'ATS 网上商店' 和 production_www.paypal_transactions.RESPMSG = '已批准' 按 ats_store.order.id 分组 按 order_date 排序

【问题讨论】:

    标签: php mysql jointable


    【解决方案1】:

    为了简化,请执行以下操作:

    1) 为您要加入的每个查询创建一个视图

    2) 创建视图后:

    SELECT ProductID, SUM(Amout) FROM 
    (SELECT * FROM vw_View1
    UNION ALL
    SELECT * FROM vw_View2
    UNION ALL
    SELECT * FROM vw_View3) GROUP BY ProductID
    

    只需确保所有视图具有相同数量的字段和名称。

    这符合您的需要吗?

    【讨论】:

    • 我想发布我的两个查询,但 cmets 框显示“字符太多”。我可以在上面附加一个文件吗?
    • ercpap,这很棒。现在想起来,我的同事确实提到了这一点。我为我的订单商品买了这个:A1、A2、PKG1。正是我想要的!我创建了两个视图,这是我如何使用它们: select *, group_concat(sv.products, ',',pv.products) from sessions_view sv JOIN packages_view pv ON sv.order_id = pv.order_id
    【解决方案2】:
    SELECT order_id, products FROM session
    
    UNION
    
    SELECT order_id, products FROM package
    

    【讨论】:

    • 要是我的查询这么短就好了!不习惯使用UNION。我尝试并得到“UNION 和 ORDER BY 的错误使用”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 2021-04-11
    • 2011-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多