如何从多个表中获取“BILL”

How to get a “BILL” from multiple tables

简单的餐厅架构

带有插入和订单事务的postgresql https://hastebin.com/cobuquzobo.sql

每个 guest/s 在 sitting_table 是一个新的 table

同一 sitting_table 上的每个订单都将是一个新订单 orderr

账单将通过输入 sitting_table_idorderr 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 ..

谢谢!

您的 RDBMS 不是生成格式化的、面向客户的账单的正确工具。然而,它可以为您做的是将生成账单所需的所有信息交给您;剩下的工作属于表现层。

这是一个 SQL 查询,可用于收集允许您的应用程序生成帐单的信息。

它遵循在您的架构中声明的关系 link tables sitting_tableorderrorderr_menu_itemmenu_itememployee。这几乎连接了架构中的所有 table,因此如果需要额外的列,您应该能够对其进行调整。

数据通过坐 table、订单和菜单项以及相关数量和计算值进行聚合;从您提供的信息来看,这似乎是您预期的聚合水平。

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

See the db fiddle

您可以取消注释 WHERE 子句以将选择限制为给定的 sitting_tableorderr