作者danielguo (Daniel Guo)
看板Database
标题Re: [SQL ] 相同资料不显示
时间Fri Apr 1 08:44:13 2011
你需要的是 row ranking, 但 MySQL 没有原生支援, 可以用其他方法取得
但建议还是分开查询比较好, 让应用程式抓三次结果 (原因看下面就知道)
一个十分逆天的查询的做法如下, 假设资料表为 income, pay, pay2
首先要取得一个日期有几笔资料:
http://codepad.org/4YGa69Hd
传回结果:
+------------+------+
| date | rank |
+------------+------+
| 2011-01-01 | 1 |
| 2011-01-01 | 2 |
| 2011-01-01 | 3 |
| 2011-01-01 | 4 |
| 2011-01-02 | 1 |
| 2011-01-02 | 2 |
| 2011-01-03 | 1 |
| 2011-01-04 | 1 |
+------------+------+
用此结果以 date, rank LEFT JOIN income, pay, pay2:
http://codepad.org/18iPgXOK
传回结果:
+------------+--------+------+------+
| date | income | pay | pay2 |
+------------+--------+------+------+
| 2011-01-01 | 100 | 50 | 50 |
| 2011-01-01 | 150 | 50 | 50 |
| 2011-01-01 | NULL | 50 | 10 |
| 2011-01-01 | NULL | 10 | NULL |
| 2011-01-02 | 100 | 30 | 30 |
| 2011-01-02 | NULL | 10 | 10 |
| 2011-01-03 | 50 | 50 | 50 |
| 2011-01-04 | NULL | 50 | 50 |
+------------+--------+------+------+
注: 这边SQL把每个 JOIN 都完整写出来, 不用缩写, 不过 MySQL 伺服器做的事情一样
这边用了一堆 JOIN, 用 EXPLAIN 出来有 17 个表, 资料一多效能一定很差
(UNION 2, UNION RESULT 1, PRIMARY 4, DERIVED 4, DEPENDENT SUBQUERY 6)
可以有更好的写法, 如使用 view, temporary table 等等
不过我建议还是在应用程式排版较好, 对 MySQL 伺服器的负担小太多了
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 71.107.127.201
※ 编辑: danielguo 来自: 71.107.127.201 (04/01 08:50)
1F:→ fantasyj:我比较好奇的是原po没注明dbms,您如何确定原po是用mysql? 04/01 09:34
2F:→ averywu:因为会问这种笨问题的通常都不会使用太POWERFUL的DBMS 04/01 09:50
3F:→ danielguo:XD, 倒是没想到, 不过感觉像 MySQL 04/01 10:06
4F:→ danielguo:不过不管是哪种 DBMS, 基本上知道不要这样用这点就行了 04/01 10:10