簡體   English   中英

PHP MySQL輸出兩個SQL Select語句

[英]PHP MySQL outputting two SQL Select Statements

我想將以下兩個查詢合並為一個,其中日期為第一列。 我遇到的問題是子查詢的條件不同,第二個查詢可能沒有每個月的值。 我一直在不同的頁面上運行它們,因此為什么AS num_custs兩者都相同。

我用SQL嘗試了幾種不同的方法,但到目前為止都失敗了。 我最初的想法是在SQL中使用UNION,但這沒有用。 我認為我在嘗試使用SQL而不是PHP的正確方法。

第一個問題是我應該使用哪個SQL命令來實現這一目標?

希望這一切都有道理。

查詢1:

            SELECT * , COUNT( entity_id ) AS num_custs
                FROM (

                SELECT e. * , e.created_at AS abc123, o.status, o.total_invoiced, o.shipping_description, o.subtotal_incl_tax, MAX( o.created_at ) AS last_order_date
                FROM mg_customer_entity AS e
                LEFT JOIN mg_sales_flat_order AS o ON o.customer_id = e.entity_id
                WHERE e.entity_type_id =  '1'
                AND o.status NOT LIKE  'canceled'
                AND o.status NOT LIKE  'closed'
                AND o.status NOT LIKE  'fraud'
                AND o.status NOT LIKE  'holded'
                AND o.status NOT LIKE  'paypal_canceled_reversal'
                AND e.store_id
                BETWEEN 1 
                AND 2 
                AND o.total_invoiced IS NOT NULL 
                AND o.subtotal_incl_tax IS NOT NULL 

                GROUP BY e.entity_id
                HAVING last_order_date IS NOT NULL

                )sub_query
                GROUP BY YEAR( abc123 ) , MONTH( abc123 )
                ORDER BY abc123 DESC

查詢2:

            SELECT * , COUNT( entity_id ) AS num_custs
                FROM (

                SELECT e. * , e.created_at AS abc123, o.status, o.total_invoiced, o.shipping_description, o.subtotal_incl_tax, MAX( o.created_at ) AS last_order_date
                FROM mg_customer_entity AS e
                LEFT JOIN mg_sales_flat_order AS o ON o.customer_id = e.entity_id
                WHERE e.entity_type_id =  '1'
                AND o.status NOT LIKE  'canceled'
                AND o.status NOT LIKE  'closed'
                AND o.status NOT LIKE  'fraud'
                AND o.status NOT LIKE  'holded'
                AND o.status NOT LIKE  'paypal_canceled_reversal'
                AND e.store_id
                BETWEEN 1 
                AND 2 
                AND o.total_invoiced IS NOT NULL 
                AND o.subtotal_incl_tax IS NOT NULL 

                GROUP BY e.entity_id
                HAVING last_order_date >= DATE_SUB( CURDATE( ) , INTERVAL 91 DAY )
                AND last_order_date IS NOT NULL

                )sub_query
                GROUP BY YEAR( abc123 ) , MONTH( abc123 )
                ORDER BY abc123 DESC

您提到您希望日期作為第一個結果,您可以指定所有字段,也可以僅將其添加在前面。

如果您使用PHP構建查詢,則可以輕松注入額外條件。

該條件將插入sprintf函數中的“%s”位置。

    // set $limit_order_date depending on the page

    $having = '';

    if ( true === $limit_order_date ) {
        $having = 'AND last_order_date >= DATE_SUB( CURDATE( ) , INTERVAL 91 DAY )';
    }


    $sql = sprintf("
        SELECT abc123,
               * ,
               COUNT( entity_id ) AS num_custs
          FROM (
            SELECT e. *,
                   e.created_at AS abc123,
                   o.status,
                   o.total_invoiced,
                   o.shipping_description,
                   o.subtotal_incl_tax,
                   MAX( o.created_at ) AS last_order_date
              FROM mg_customer_entity AS e
         LEFT JOIN mg_sales_flat_order AS o
                ON o.customer_id = e.entity_id
             WHERE e.entity_type_id =  '1'
               AND o.status NOT LIKE  'canceled'
               AND o.status NOT LIKE  'closed'
               AND o.status NOT LIKE  'fraud'
               AND o.status NOT LIKE  'holded'
               AND o.status NOT LIKE  'paypal_canceled_reversal'
               AND e.store_id BETWEEN 1 AND 2
               AND o.total_invoiced IS NOT NULL
               AND o.subtotal_incl_tax IS NOT NULL
          GROUP BY e.entity_id
            HAVING last_order_date IS NOT NULL %s
                )sub_query
     GROUP BY YEAR( abc123 ),
              MONTH( abc123 )
     ORDER BY abc123 DESC",
        $having
    );

希望我能正確解釋您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM