У меня есть следующие два Запроса, которые я хотел бы объединить в один с датой первого столбца. Проблема, с которой я сталкиваюсь, заключается в том, что условия подзапроса различны, а второй запрос может не иметь значения для каждого месяца. Я запускаю их на разных страницах, поэтому AS num_custs одинаково для обоих.PHP MySQL, выводящий две инструкции SQL Select
Я пробовал пару разных вещей с SQL, но до сих пор не удалось. Мои первоначальные мысли заключались в использовании UNION в SQL, но это не сработало. Я думаю, что я нахожусь на правильном пути, пытаясь сделать это в 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
спасибо за ваш ответ, что произойдет, если у вас было более одного доллара? это возможно? Также как бы вы проходили через каждую строку? –
У вас может быть оператор select или несколько операторов if, которые собирают условия «наличия» в массив '$, имеющий [] =« И НЕКОТОРЫЕ СОСТОЯНИЯ »;' которые вы можете комбинировать с '$ having_string = implode ('', $, имеющим) ' – moorscode