PHP MySQL输出两条SQL Select语句
我想将以下两个查询合并为一个查询,日期是第一列。我遇到的问题是子查询的条件不同,第二个查询可能没有每个月的值。我已经在不同的页面上运行了它们,因此为什么这两个页面上的AS num_custs是相同的 我用SQL尝试了几种不同的方法,但到目前为止都失败了。我最初的想法是在SQL中使用UNION,但那不起作用。我认为我尝试用SQL而不是PHP来实现这一点是正确的 第一个问题是我应该使用哪个SQL命令来实现这一点 希望一切都有意义 问题1:PHP MySQL输出两条SQL Select语句,php,mysql,Php,Mysql,我想将以下两个查询合并为一个查询,日期是第一列。我遇到的问题是子查询的条件不同,第二个查询可能没有每个月的值。我已经在不同的页面上运行了它们,因此为什么这两个页面上的AS num_custs是相同的 我用SQL尝试了几种不同的方法,但到目前为止都失败了。我最初的想法是在SQL中使用UNION,但那不起作用。我认为我尝试用SQL而不是PHP来实现这一点是正确的 第一个问题是我应该使用哪个SQL命令来实现这一点 希望一切都有意义 问题1: SELECT * , COUNT(
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构建查询,则可以轻松地插入额外的条件 将在中的“%s”位置插入条件
我希望我正确地解释了你的问题。谢谢你的回答,如果你有超过1美元的收入,会发生什么?可能吗?还有,如何循环每一行?可以有一个select语句或多个if语句将“having”条件收集到一个数组中
$having[]=“和某个条件”代码>可以与$having\u string=内爆(“”,$having)
// 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
);