我有一个数据表table1,有很多数据,结构和部分数据如下
id - 主键,自动
title - text
oid - int(8) //是另外一个表的主键
dj - int(8) //内容为数字,范围是0-9
包含的部分数据如下
id title oid dj
1 dkljdf 1 2
2 dfdfdf 2 0
3 12ljdf 5 9
4 ghljdf 1 1
5 dk78df 3 8
6 359565 4 1
7 pfodaf 2 2我想结合PHP进行分页显示,4条一页,每一页的内容组成要求1.相同oid的每页只能显示两条
2.排列顺序是按dj来从大到小排列(9到0)
3.相同dj的,按oid从小到大排列按上面的要求就可以显示为
id title oid dj
3 12ljdf 5 9
5 dk78df 3 8
1 dkljdf 1 2
7 pfodaf 2 2
--------------------------//上面是第一页内容
4 ghljdf 1 1
6 359565 4 1
2 dfdfdf 2 0请问这个SQL语句该怎么写呢?多谢select * from table1 order by ... limit $offset,4
id - 主键,自动
title - text
oid - int(8) //是另外一个表的主键
dj - int(8) //内容为数字,范围是0-9
包含的部分数据如下
id title oid dj
1 dkljdf 1 2
2 dfdfdf 2 0
3 12ljdf 5 9
4 ghljdf 1 1
5 dk78df 3 8
6 359565 4 1
7 pfodaf 2 2我想结合PHP进行分页显示,4条一页,每一页的内容组成要求1.相同oid的每页只能显示两条
2.排列顺序是按dj来从大到小排列(9到0)
3.相同dj的,按oid从小到大排列按上面的要求就可以显示为
id title oid dj
3 12ljdf 5 9
5 dk78df 3 8
1 dkljdf 1 2
7 pfodaf 2 2
--------------------------//上面是第一页内容
4 ghljdf 1 1
6 359565 4 1
2 dfdfdf 2 0请问这个SQL语句该怎么写呢?多谢select * from table1 order by ... limit $offset,4
SELECT a.dj,a.id,a.oid,a.title FROM ttg1a a LEFT JOIN ttg1a b ON (a.dj=b.dj) OR (a.dj=b.dj AND a.oid>b.oid) GROUP BY a.dj,a.id,a.oid,a.title
ORDER BY 1 DESC,COUNT(b.id)
2.排列顺序是按dj来从大到小排列(9到0)
3.相同dj的,按oid从小到大排列
从你的例子只能看出规则2,3。这样可以使用一楼的这个语句
select * from table1 order by dj desc,oid limit $offset,4;但你的第一个规则无法体现。建议你用例子来说明。 建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
(
id int(8),
title text,
oid int(8),
dj int(8)
)
INSERT INTO `table1` (`id`, `title`,`oid`, `dj`) VALUES
(1, 'dkljdf', '1', '2'),
(2, 'dfdfdf', '2', '0'),
(3, '12ljdf', '5', '9'),
(4, 'ghljdf', '1', '1'),
(5, 'dk78df', '1', '8'),
(6, '359565', '4', '1'),
(7, 'pfodaf', '2', '2');我用的是mysql数据库,通过select * from table1 order by dj desc,oid asc limit $offset,4;实现分页,每页4个结果,而且结果按dj降序,oid升序排列,这里出来的结果id title oid dj
3 12ljdf 5 9
5 dk78df 1 8
1 dkljdf 1 2
7 pfodaf 2 2
--------------------------// 上面是第一页内容
4 ghljdf 1 1
6 359565 4 1
2 dfdfdf 2 0我想实现的是同一个页面中,只出现一个oid,只有数据不够的时候,才有同一个页面中有多个oid出现,并按dj的降序排列,所以,我要的显示的结果是
id title oid dj
3 12ljdf 5 9
5 dk78df 1 8
7 pfodaf 2 2
6 359565 4 1
--------------------------// 上面是第一页内容
1 dkljdf 1 2
4 ghljdf 1 1
2 dfdfdf 2 0请问这个该怎么做呢?谢谢
+------+--------+------+------+
| id | title | oid | dj |
+------+--------+------+------+
| 1 | dkljdf | 1 | 2 |
| 2 | dfdfdf | 2 | 0 |
| 3 | 12ljdf | 5 | 9 |
| 4 | ghljdf | 1 | 1 |
| 5 | dk78df | 1 | 8 |
| 6 | 359565 | 4 | 1 |
| 7 | pfodaf | 2 | 2 |
+------+--------+------+------+
7 rows in set (0.06 sec)-- 第一页
mysql> select *
-> from table1 a
-> order by (select count(*) from table1 where oid=a.oid and dj>=a.dj) ,dj desc
-> limit 0,4;
+------+--------+------+------+
| id | title | oid | dj |
+------+--------+------+------+
| 3 | 12ljdf | 5 | 9 |
| 5 | dk78df | 1 | 8 |
| 7 | pfodaf | 2 | 2 |
| 6 | 359565 | 4 | 1 |
+------+--------+------+------+
4 rows in set (0.00 sec)-- 第二页
mysql> select *
-> from table1 a
-> order by (select count(*) from table1 where oid=a.oid and dj>=a.dj) ,dj desc
-> limit 4,4;
+------+--------+------+------+
| id | title | oid | dj |
+------+--------+------+------+
| 1 | dkljdf | 1 | 2 |
| 2 | dfdfdf | 2 | 0 |
| 4 | ghljdf | 1 | 1 |
+------+--------+------+------+
3 rows in set (0.00 sec)mysql>
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html