现在我一个表中存放有十多个类别的文章,比如某个省的新闻:A市:表字段值 a
新闻1,新闻2,新闻3,新闻4,新闻5,新闻6,新闻7,新闻8,新闻9,新闻10B市:表字段值 b
新闻1,新闻2,新闻3,新闻4,新闻5,新闻6,新闻7,新闻8,新闻9,新闻10C市:表字段值 c
新闻1,新闻2,新闻3,新闻4,新闻5,新闻6,新闻7,新闻8,新闻9,新闻10D市:表字段值 d
新闻1,新闻2,新闻3,新闻4,新闻5,新闻6,新闻7,新闻8,新闻9,新闻10这些新闻都存放在一个表中,根据市区代号区分。现在我想调用每个市最后面的5条新闻,然后存放到一起随机打乱再显示。请问这个SQL语句怎么写? 查询每个市最后五条再存放到一个数组这显然是浪费资源的,对SQL语法不熟,敢请各位前辈给个指导,能否有什么简短的SQL语句一次性查出。。谢谢。

解决方案 »

  1.   

    sql语句可以实现如此的打乱顺序输出么?我想楼主还是先将其查出在打乱顺序吧,php有内置打乱数组顺序的函数
      

  2.   

    用临时表加order by rand()
      

  3.   

    用临时表加order by rand()
      

  4.   


    固定两三个市的话,join进来还行,但很多那该如何用临时表呢,请教解答。3Q
      

  5.   

    循环类别,  查询 类别.count 次数据库~~临时表的话, 假如有十万人同时访问,是不是要创建十万个临时表呢?俺不太懂, 别砸我。
      

  6.   

    1)先用select * from tb where 市=“北京市”order by id DESC limt 0,5查每个市的最新5条新闻
    2)再用Union将1)中的结果联合起来
    3)最后再select * from ("2)的结果") as tb1 order by rand()
      

  7.   

    $sql = "
    select * from (select title from news where city=1 order by id desc limit 5 )
    A
    union all 
    select * from (select title from info where city=2 order by id desc limit 5 )
    B
    ";谢谢各位的解答,这样联合查询可以解决了。