Как получить «БИЛЛ» из нескольких столов - PullRequest
0 голосов
/ 22 января 2019

простая схема ресторана

schema

postgresql со вставкой и транзакцией заказа https://hastebin.com/cobuquzobo.sql

каждый гость / с на sitting_table это новая таблица

каждый ордер на тот же sitting_table будет новым orderr

счет будет принят путем ввода sitting_table_id, orderr id сс введенным значением sitting_table_id, до orderr_menu_item ...

(с использованием psycopg2 / python, печать в linux cmd)

Я хочу, например, напечатать BILL, иЯ бы хотел, чтобы они хранились ...

сейчас я здесь немного потерян и не знаю, что делать или что делать

данные счета будут выглядеть так:

bill nr23
order2
  cola × 2 15.50  31.00
  pizza × 2 50.00 100.00
order3
  squid × 3  50.00 150.00
total price ..

Спасибо!

enter image description here

1 Ответ

0 голосов
/ 22 января 2019

Ваша СУБД не является подходящим инструментом для формирования отформатированного, ориентированного на клиента счета.Однако он может передать вам всю информацию, необходимую для составления счета;остальная часть работы относится к уровню представления.

Вот SQL-запрос, который можно использовать для сбора информации, которая позволит вашему приложению сгенерировать счет.

Из связей, объявленных в вашей схеме, следует связывать таблицы sitting_table, orderr, orderr_menu_item, menu_item и employee.Это в значительной степени объединяет все таблицы в вашей схеме, поэтому вы должны иметь возможность адаптировать ее, если требуются дополнительные столбцы.

Данные агрегируются по сидячей таблице, порядку и пункту меню со связанным количеством и вычисленным значением;Исходя из предоставленной вами информации, похоже, что это ваш ожидаемый уровень агрегации.

SELECT
    st.id sitting_table_id,
    o.id orderr_id,
    e.name employee_name,
    e.surname employee_surname,
    mi.name item_name,
    mi.cijena item_price,
    SUM(omi.quantity) item_quantity,
    SUM(omi.quantity) * mi.cijena item_value
FROM
    sitting_table st
    INNER JOIN orderr o ON o.sitting_table_id = st.id
    INNER JOIN orderr_menu_item omi ON omi.orderr_id = o.id
    INNER JOIN menu_item mi ON mi.id = omi.menu_item_id
    INNER JOIN employee e ON e.oib = o.employee_oib
-- WHERE st.id = ? AND o.orderr = ?
GROUP BY
    st.id,
    o.id,
    e.name,
    e.surname,
    omi.id,
    mi.name,
    mi.cijena
ORDER BY
    st.id,
    o.id,
    mi.name,
    mi.cijena

См. скрипту БД

Вы можетераскомментируйте предложение WHERE, чтобы ограничить выбор заданными sitting_table и orderr.

...