Re: [請益] 有關排序的問題
※ 引述《shiauuen ( )》之銘言:
: 假設有十個網站,資料庫裡分別有這十個網站的資料表,用來記錄流量的
: 因為要扣除一些無效的流量因素,需再利用程式去計算這十個網站的流量
: 然後計算好這十個網站真正流量的數值,需要做排序,從流量高到低,列表出來
: 例如像這樣:
: 編號 站名 流量
: -------------
: 05 Z網站 100
: 01 A網站 90
: 08 G網站 80
: 04 U網站 70
: 02 O網站 60
: 07 P網站 50
: 06 E網站 40
: 03 S網站 30
: 10 L網站 20
: 09 M網站 10
: 請問要顯示這樣的結果,程式要如何寫呢?
: 麻煩各位了,先謝謝了!
想到三種方法 ~
第一個方法你可以用 mysql 的 merge table,
轉一篇小弟寫在友站的文章
作者 littlex (小艾克斯) 看板 Mysql
標題 [文件]MySQL中使用merge table
時間 Thu Oct 7 09:52:45 2004
───────────────────────────────────────
關於merge table的實作方式:
請參考官網
http://dev.mysql.com/doc/mysql/en/MERGE.html
在工作上的需要,有一些log之類的資料
在塞進mysql後,會讓table size膨脹速度太快..
造成資料的備份或維護不易..
這時可以使用mysql提供的merge table功能,
將資料分成好多table寫入
做法如下:
1.建立要被union進來的table,
例如:
CREATE TABLE t1 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
mysql> CREATE TABLE t2 (
-> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> message CHAR(20));
2.建立merge table (就是你要寫入的table名稱)
CREATE TABLE total (
-> a INT NOT NULL AUTO_INCREMENT,
-> message CHAR(20), INDEX(a))
-> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
請看SQL語句的最後一行..
type=merge untion=(t1,t2)
代表你要把t1和t2兩個table union進來
insert_method=last
就是要寫入資料到後面的table t2
這樣你的t2 table如果太大
可以再建一個 structure一樣的t3
同時再下sql command :
ALTER TABLE `total` INSERT_METHOD=LAST UNION=(`t1`,`t2`,`t3`);
您的total就開始寫入t3哩
這樣做的好處是
您的程式不用做更改..
就能做到將資料分散table放置 :)
(最理想的狀況是寫在crontab 中, 讓系統幫您做掉這些sql command :)
第二個方法是用 union 的 select
(select * from a ) union (select * from b)
第三種可以用 tmp table
這種小弟就沒實做過哩~
可參考官方說明
http://dev.mysql.com/doc/refman/5.0/en/create-table.html
--
修電腦條款(來自一個好人的怒吼)
http://0rz.tw/ae1rm
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.23.29.91
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
0
1
PHP 近期熱門文章
PTT數位生活區 即時熱門文章