Умножить две строки из одного столбца - PullRequest
0 голосов
/ 01 октября 2018

Я хочу умножить 2 результата в одном и том же столбце с помощью другого столбца.Я попытаюсь объяснить:

Во-первых, позвольте мне представить таблицы, которые я использую:

1 / Поиск продуктов (идентификатор объекта) термина референта (идентификатор term_taxonomy)

TAB => wp_term_relationships

+-----------+------------------+
| object_id | term_taxonomy_id |
+-----------+------------------+
| 723       | 685              |
| 724       | 685              |
+--------------+---------------+

2 / Поиск идентификатора всех продуктов (meta_value) _product_id (meta_key) для получения order_item_id каждого

TAB => wp_woocommerce_order_itemmeta NB: meta_id 400не принадлежат термину referent

+---------+---------------+---------------+------------+
| meta_id | order_item_id |  meta_key     | meta_value |
+-------- +---------------+---------------+------------+
| 203     | 24            | _product_id   | 723        |
| 204     | 24            | _product_cost | 79         |
| 205     | 24            | _qty          | 5          |
| 355     | 56            | _product_id   | 724        |
| 356     | 56            | _product_cost | 99         |
| 357     | 56            | _qty          | 3          |
| 400     | 26            | _product_id   | 1500       |
+---------+---------------+---------------+------------+

3 / Поиск по всему order_ID (meta_value) для получения order_id

TAB => wp_woocommerce_order_items NB: Order_item_id 26 не принадлежит термину referent NB2:два продукта в order_id 10 (1 и 3)

+---------------+-----------------+------------------+----------+
| order_item_id | order_item_name |  order_item_type | order_id |
+---------------+-----------------+------------------+----------+
| 24            | product 1       | line_item        | 10       |
| 25            | delivery        | shipping         | 10       |
| 56            | product 3       | line_item        | 10       |
| 26            | product 50      | line_item        | 11       |
+---------------+-----------------+------------------+----------+

4 / Поиск всех order_id (ID) и передача аргументов WHERE для фильтрации списка

TAB => wp_posts

+-------------------+---------------------+
| ID | post_status  |  post_date          |
+----+--------------+---------------------+
| 10 | wc-completed | 2018-09-25 23:04:52 |
| 11 | wc-suspend   | 2017-09-25 23:04:52 |
| 15 | wc-completed | 2017-09-66 23:04:52 |
+-------------------+---------------------+

Теперь, следуя тому, что я сделал до сих пор:

SELECT
COUNT( posts.ID ) AS count_orders,
SUM(order_meta_items_cost.meta_value * order_meta_items_qty.meta_value) AS total_sales

FROM wp_posts AS posts

LEFT JOIN wp_term_relationships AS rel ON rel.term_taxonomy_id = '685'

LEFT JOIN wp_woocommerce_order_itemmeta AS order_meta_items 
ON order_meta_items.meta_value = rel.object_id 
AND order_meta_items.meta_key LIKE '_product_id'

LEFT JOIN wp_woocommerce_order_items AS order_items 
ON order_items.order_item_id = order_meta_items.order_item_id 
AND order_items.order_item_type LIKE 'line_item'

INNER JOIN wp_woocommerce_order_items AS order_items_cost 
ON order_items_cost.order_id = posts.ID 
AND order_items.order_item_type LIKE 'line_item'

INNER JOIN wp_woocommerce_order_itemmeta AS order_meta_items_cost 
ON order_meta_items_cost.order_item_id = order_items_cost.order_item_id 
AND order_meta_items_cost.meta_key = '_wc_cog_item_cost'

INNER JOIN wp_woocommerce_order_itemmeta AS order_meta_items_qty 
ON order_meta_items_qty.order_item_id = order_items_cost.order_item_id 
AND order_meta_items_qty.meta_key = '_qty'

WHERE  posts.ID = order_items.order_id
AND posts.post_status IN ('wc-completed')
AND UNIX_TIMESTAMP(CONVERT_TZ(posts.post_date, '+00:00', @@global.time_zone)) >= '1537747200'
AND UNIX_TIMESTAMP(CONVERT_TZ(posts.post_date, '+00:00', @@global.time_zone)) <= '1538351999'

Результаты, которые я хочу:

  • Иметь правильные номера записей.ID(count_orders)
  • Иметь правильную общую стоимость продукции (по количеству).

В этом примере это будет: Выполнен только заказ 10, поэтому мы сохраняем order_item_id 24 и 56. Теперь нам нужна цена товара по его количеству (кол-вопродукта в одном заказе)

order_item_id 24 :
_product_cost = 79
_qty = 5
so 79*5 = 395

order_item_id 56 :
_product_cost = 99
qty = 3
so 99*3 = 297

** Right result in total_sales -> 395+297 = 692**

Я перепробовал много комбинаций, но не могу понять, как это сделать.

У вас есть идеи?Большое спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Этот запрос дает вам необходимые общие продажи.

SELECT SUM(prod_meta_val) total_sales FROM
(SELECT order_item_id,  PRODUCT(meta_value) prod_meta_val 
FROM wp_woocommerce_order_itemmeta
WHERE meta_key IN ('_qty', '_product_cost')
AND order_item_id IN
(SELECT order_item_id FROM wp_woocommerce_order_items 
WHERE order_item_type = 'line_item' 
AND order_id IN
(SELECT ID FROM wp_posts 
WHERE post_status='wc-completed' 
AND UNIX_TIMESTAMP(CONVERT_TZ(posts.post_date, '+00:00', @@global.time_zone)) >= '1537747200'
AND UNIX_TIMESTAMP(CONVERT_TZ(posts.post_date, '+00:00', @@global.time_zone)) <= '1538351999'
)
) GROUP BY order_item_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...