我想到的是有规律的,而且有大大的规律,很有用的规律,例如当有很多很多的数据时(例如1000个数据,有可能有重复的),我需要最后面的50个不同的数据,而且是最后出现的放在最前面。举例说明吧:
有一组音乐点歌数据是这样的:(按时间先后顺序排列)
1、歌曲A
2、歌曲B
3、歌曲C
4、歌曲D
5、歌曲B(后来又有人点到歌曲B)
6、歌曲E
当我要播放最后点播的3首歌时(相同的歌曲只播放一次),我希望出现的是
歌曲依次是:歌曲E、B、D,但我用
select distinct MP3 from MUSIC order by id desc;
命令则不能出现我想要的,它的结果是E、D、C(因为它的排序是这样的:E、D、C、B、A)。
应该用什么方法才能达到我想要的目的。
希望大家为我指点迷津,谢谢

解决方案 »

  1.   

    多加一个字段记录重复出现的字数,每次新加入数据就统计前面的数量,放入这个子段,以后呢order by same desc, num desc
      

  2.   

    你说的点歌,应该是从先点的那首开始而不是最后点的那首(最新的)开始吧你的歌曲例子上面那个B才是后来的按照时间先后排序就是按照主键排序,大的当然是新的帮你修正,让你看得更清楚有一组音乐点歌数据是这样的:(按时间先后顺序排列)
    6、歌曲A
    5、歌曲B(后来又有人点到歌曲B)
    4、歌曲C
    3、歌曲D
    2、歌曲B
    1、歌曲E
    当我要播放最后点播的3首歌时(相同的歌曲只播放一次),我希望出现的是
    歌曲依次是:歌曲C、B、A,但我用
    select distinct MP3 from MUSIC order by id desc;
    命令则不能出现我想要的,它的结果是D、C、A(因为它的排序是这样的:E、B、D、C、A)。你可以只拿出前三首歌,而不必要全部拿来排,看
    select distinct MP3 from MUSIC where id between '$from' and '$to' order by id desc;$from 为id最大值-3
    $to 为id最大值这样取出来排序结果是CBA如果取前6个排
    结果是EBDCA,仍然符合先点的歌先放的原则
      

  3.   

    非常感谢 microsoft_windows(禮拜四) ,一般情况下按照你的方法问题已经得到解决。但特殊情况下你的方法还是行不通,希望能继续指教:有一组音乐点歌数据是这样的:(按时间先后顺序排列,我还是按我的说法排列)
    ID 歌曲名
    1  歌曲A(第一个点歌的人,id为1)
    2  歌曲B
    3  歌曲C
    4  歌曲D
    5  歌曲B(后来又有人点到歌曲B)
    6  歌曲E
    当我要选择最后点播的6首歌时(要求相同的歌曲只播放一次),我希望出现的歌曲依次是:歌曲E、B、D、C、A,但我用
    select distinct MP3 from MUSIC where id between 1 and 5 order by id desc;(此时,相同的歌曲在 WHERE ID BETWEEN 1 AND 5 之间,结果导致WHERE ID BETWEEN 1 AND 5失效)
    命令则不能出现我想要的,它的结果是E、D、C、B、A(因为它的排序是这样的:E、D、C、B、A)。
    应该用什么方法才能达到我想要的目的?