[英]CodeIgniter: Join more than 3 tables
我有五张桌子:
Bill
:否(pk),日期,时间,总计 BillOrderRelation
:no(fk),order_id(fk) Order
:order_id(pk),menu_id(fk),数量,总计 Menu
:menu_id(pk),category_id(fk),menu_name,股票,价格 Category
:category_id(pk),category_name,颜色 就我而言,我必须检索在一天范围,7天范围和30天范围内销售额最高的菜单。
我已经成功检索了这些信息,但是我认为它太复杂了。 首先,我必须在Bill上检索日期,然后在BillOrderRelation中找到订单,然后找到Menu,然后找到Category名称。 它包含许多查询和用于对同一菜单进行汇总的复杂方法。
我的问题是,是否可以在一个查询中查询所有这些表,以仅检索menu.menu_name,order.quantities,order.total,category.name,并且其中包括检索到的同一菜单的总和?
我已经成功地查询了三个表,而没有使用这样的时间范围。
SELECT
menu.menu_name as top_item,
SUM(order.quantities) AS count_sold,
SUM(order.total) AS amount,
category.nama AS categories
FROM
menu, order, category
WHERE
menu.mennu_id = bill.menu_id
AND category.category_id = menu.category_id
GROUP BY
bill.menu_id, menu.menu_name, category.category_name
ORDER BY
count_sold DESC
上面的情况有什么棘手的方法吗?
PostgreSQL更新
我相信您想要这样的东西:
SELECT
m.menu_name AS top_item
, c.name AS category
, SUM(o.quantities) AS sum_quantity
, SUM(o.total) AS sum_total
FROM
menu m
JOIN
category c
ON c.category_id=m.category_id
JOIN
order o
ON o.menu_id=m.menu_id
JOIN
billorderrelation bor
ON bor.order_id=o.order_id
JOIN
bill b
ON b.no=bor.no
WHERE
b.date >= (CURRENT_DATE - INTERVAL '7 days')
GROUP BY
m.menu_id
ORDER BY
sum_quantity DESC
;
CURRENT_DATE
允许您获取当前日期(根据数据库中指定的时区)。 了解更多: https : //www.postgresql.org/docs/8.2/static/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.