08.04.2021 13:31
В структуре связей стандартного экспорта 4 плохо ориентируюсь, в доке у них слабо на эту тему. Выкладываю для проверки и советов.

Насколько понимаю, одностолбцовый PK у них редко встречается, поэтому с условием JOIN надо внимательно.

ID чеков, номер смены в web и в этом запросе отличаются. Пока не разобрался.

SQL код:
SELECT r.store, r.cash_number, r.id, r.local_number, r.type, r.shift_open, r.date, rd.`id`, rd.name, rdc.amount
FROM  receipt r
      JOIN 
      receipt_discounts rd ON (r.`store` = rd.`store` AND r.`cash_id` = rd.`cash_id` AND r.`id` = rd.`receipt_header`)
      LEFT OUTER JOIN
      receipt_discount_coupons rdc ON (rd.store = rdc.`store` AND rd.`cash_id` = rdc.`cash_id` AND rd.`id` = rdc.`receipt_discount`)
WHERE r.store = 5 AND r.`date` > '2021-04-07' 
Миниатюры
Нажмите на изображение для увеличения
Название: 01.png
Просмотров: 35
Размер:	100.7 Кб
ID:	11310   Нажмите на изображение для увеличения
Название: 02.png
Просмотров: 36
Размер:	67.4 Кб
ID:	11311   Нажмите на изображение для увеличения
Название: 03.png
Просмотров: 28
Размер:	102.7 Кб
ID:	11312  
08.04.2021 13:39
А вопрос в чем?
09.04.2021 10:02
>>> А вопрос в чем?

Цитата:
Выкладываю для проверки и советов.
Цитата:
ID чеков, номер смены в web и в этом запросе отличаются.
Столбец "купон погашен".

SQL код:
case when exists (select 1 from receipt_discount_coupons_accept ca where ca."number" = rdc."number") then 'погашен'
              else NULL
         end ACCEPTED 
Обязательно ли связывать receipt + receipt_discounts + receipt_discount_coupons ? Или есть вариант проще?

Если нет, тогда для "погашен в чеке" потребуется еще одна связка "receipt + receipt_discounts + receipt_discount_coupons."
09.04.2021 10:57
Все же не очень понятна задача, которую вы хотите решить. Какие данные вы хотите увидеть?
Пока можно сказать, что тут:
SQL код:
JOIN receipt_discounts rd ON (r.`store` = rd.`store` AND r.`cash_id` = rd.`cash_id`... 
связка по store лишняя, cash_id достаточно, т.к. он содержит и идентификатор магазина, а поле store подставляется из настроек конвертера

Еще добавлю, если вдруг упустили, receipt_discount_coupons - таблица с напечатанными/выданными купонами, receipt_discount_coupons_accept - с принятыми от покупателей
09.04.2021 19:43
>>> Какие данные вы хотите увидеть?

На данный момент - те, которые уже получает мой запрос. Т.е. эта моя тема - для следующих поколений супермагов[цев].

>>> связка по store лишняя, cash_id достаточно

Принято.

>>> Еще добавлю, если вдруг упустили

Спасибо, не упустил, чему свидетельством предыдущее сообщение.
16.04.2021 21:11
Цитата:
DMaslov На данный момент - те, которые уже получает мой запрос. Т.е. эта моя тема - для следующих поколений супермагов[цев].
Описал бы, что это и для чего.
21.04.2021 10:23
Мне поставили задачу вывести список распечатанных суммовых купонов, за нужный период времени по нужному магазину.

"OUTER JOIN receipt_discount_coupons" использовал в одном из вариантов запроса, чтобы разобраться, какие строки receipt_discounts не имеют данных в receipt_discount_coupons.

Текущий запрос:

SQL код:
SELECT r.store, r.cash_number, r.local_number, r.shift_open, r.date, rd.name, rdc.amount,
       CASE WHEN EXISTS (SELECT 1 FROM receipt_discount_coupons_accept ca WHERE ca.`number` = rdc.`number`) THEN 'погашен'
              ELSE NULL
       END ACCEPTED 
FROM  receipt r
      JOIN receipt_discounts rd ON (r.cash_id = rd.cash_id AND r.id = rd.receipt_header)
      JOIN  receipt_discount_coupons rdc ON (rd.`cash_id` = rdc.`cash_id` AND rd.id = rdc.receipt_discount)
WHERE r.date BETWEEN '2021-02-01' AND '2021-02-29' 
  
ORDER BY r.store, r.cash_number, r.date 
По названию колонок вроде в основном понято, что это: магазин, касса, номер чека(внутри смены), номер смены (как писал ранее, не совпадает с номером, выводимым в web), дата/время, название купона, его сумма и статус "погашен/не погашен".
22.04.2021 12:57
Чтобы номер смены совпал, нужно брать именно номер, а не айди
SQL код:
select ... s.number,
...
from receipt r
join shift s on r.cash_id=s.cash_id and r.shift_open=s.id
... 
Часовой пояс GMT +3, время: 08:13.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.