mysql - 關於 PHP 中訂單按照從大到小的順序排序的思路.

來源:互聯網
上載者:User
關鍵字 php mysql
現在我的需求是這樣的,
每一個使用者會產生 N 多訂單 現在要排序 訂單數量從大到小 的使用者.

如果按照傳統 我先將每一個使用者的訂單總數統計,然後進行排序.這樣一但資料量變大基本無法排序會很消耗系統資源統計時間也會變長.請問有什麼方法嗎?

回複內容:

現在我的需求是這樣的,
每一個使用者會產生 N 多訂單 現在要排序 訂單數量從大到小 的使用者.

如果按照傳統 我先將每一個使用者的訂單總數統計,然後進行排序.這樣一但資料量變大基本無法排序會很消耗系統資源統計時間也會變長.請問有什麼方法嗎?

0.假設一天幾十萬的訂單,搞個指令碼,每天跑一次,統計一天的訂單數
1.根據訂單時間從資料庫擷取每天的總訂單

可以為時間加上索引

2.根據取出的資料,從程式方面,按使用者分組,統計訂單中每位使用者的訂單數

不要用sql來做分組統計,因為資料庫壓力會非常大,可以放到php中來做處理,統計這些訂單中的每一個使用者有多少訂單,相當於sql中的group by user

3.然後加到使用者的訂單總數中,可以放到redis中

像這種情況,可可以新增統計表呀。各種統計資料可以每天定時統計呀。然後就不用每次都要去統計一遍嘍。

使用者表增加一個訂單總數和訂單總金額的欄位不就行了...

這是典型的空間時間轉換嘛。。。既然你效能跟不上只能加欄位或者看需求了,或者換一種資料庫會稍微好一點

如果你有這樣的業務需求的話,我建議在使用者的這個表中增加一個列,就是計算使用者購買的訂單的數量列。這樣使用者每建立一個訂單則就+1,最後排序的時候,可以直接按照這個欄位排序就ok了。簡單快捷。

使用者表 user

id | name1  | 張三2  | 李四3  | 王五4  | 趙六

訂單表 order

user_id | orderNo1       | 11111112       | 22222221       | 33333333       | 44444443       | 55555552       | 66666663       | 77777773       | 88888882       | 9999999

查詢語句

select a.id,a.name,ifnull(b.num,0) as order_num from user as a left join
(select user_id,count(orderNo) as num from order where 1 group by orderNo) as b on a.id=b.user_id order by b.num desc

查詢結果

id | name | order_num3    王五    42    李四    31    張三    24    趙六    0

那你可以直接在一個sql裡面查詢就好了:

select count(*) as num from `order` group by id
  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.