作者littlex (小喵村民(金5肉10))
看板PHP
标题Re: [请益] 有关排序的问题
时间Mon Nov 13 16:54:39 2006
※ 引述《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