簡體   English   中英

CodeIgniter:聯接3個以上的表

[英]CodeIgniter: Join more than 3 tables

我有五張桌子:

  1. Bill :否(pk),日期,時間,總計
  2. BillOrderRelation :no(fk),order_id(fk)
  3. Order :order_id(pk),menu_id(fk),數量,總計
  4. Menu :menu_id(pk),category_id(fk),menu_name,股票,價格
  5. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM