CodeIgniter:加入3个以上的表

时间:2017-08-29 15:59:23

标签: php mysql codeigniter

我有五张桌子:

  1. Bill:否(pk),日期,时间,总数
  2. BillOrderRelation:否(fk),order_id(fk)
  3. Order:order_id(pk),menu_id(fk),数量,总数
  4. Menu:menu_id(pk),category_id(fk),menu_name,stock,price
  5. Category:category_id(pk),category_name,color
  6. 就我而言,我必须检索哪一个菜单在一天范围,7天范围和30天范围内销售额最高。

    我已经成功检索了这些信息,但我觉得它太复杂了。首先,我必须在Bill上检索日期,然后在BillOrderRelation中找到订单,然后找到菜单,并找到类别名称。它包含了很多查询和复杂的方法来为同一个菜单进行求和。

    我的问题是,是否可以在一个查询中查询所有这些表以仅检索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
    

    上述案例有什么棘手的方法吗?

1 个答案:

答案 0 :(得分:0)

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