我有一个数据表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

解决方案 »

  1.   

    select * from table1 order by dj desc,oid limit $offset,4;
      

  2.   

    SELECT * FROM ttg1a ORDER BY dj DESC,oid LIMIT $offset,4
      

  3.   

    or
    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)
      

  4.   

    1.相同oid的每页只能显示两条
    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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  5.   

    create table table1
    (
    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请问这个该怎么做呢?谢谢
      

  6.   

    mysql> select * from table1;
    +------+--------+------+------+
    | 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>
      

  7.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html