如何从多个表中获取“账单”

时间:2019-01-21 22:38:22

标签: sql database postgresql database-design relational-database

简单的餐厅模式

schema

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

sitting_table上的每位客人是一张新桌子

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

通过输入sitting_table_idorderr id(与输入的sitting_table_id一起最多orderr_menu_item ...

(使用psycopg2 / python,在linux cmd中打印)

例如,我想打印一张账单,我想将它们存储起来...

现在在这里,我有点迷茫,真的不知道该做什么或应该做什么

帐单数据如下:

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 :(得分:1)

您的RDBMS不是生成格式化的,面向客户的账单的正确工具。但是,它可以为您提供生成账单所需的所有信息;其余工作属于表示层。

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

它遵循在模式中声明的关系来链接表sitting_tableorderrorderr_menu_itemmenu_itememployee。这几乎连接了架构中的所有表,因此,如果需要其他列,您应该可以对其进行调整。

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

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