使用单个查询选择表格中某行上方和下方的特定数量的项目

时间:2012-04-19 15:49:48

标签: php mysql

我有一个与MySQL集成的PHP脚本,将.plist文件发送到包含两种类型项目(项目为歌曲)的iPhone应用程序:

  1. 应该已在应用中显示的项目
  2. 将来某个时候应该展示的项目
  3. 我使用两个查询和一些PHP完全可行,以所需的顺序抓取过去和未来的项目(我想要各自的变量)。主要是因为我无法找到或提出单个查询解决方案,但我很好奇你们将如何解决这个问题。是否有单个查询以按我想要的顺序获取行?是否有一个查询以其他顺序获取行?

    无论如何,这里是PHP和SQL,它抓取我想要的结果行,并按照我希望它们出现在结果.plist中的顺序放置它们。我主要使用UNIX时间戳,因为它更容易,所以我希望我不会受到严厉批评 - 我认为它不会特别影响我的特定问题。

    $readbehind = mysql_query(sprintf('SELECT SongID, RemoteSongLocation, SongTitle, UNIX_TIMESTAMP( ScheduledActivationDateTime ) AS ActivateAfterUnixTime FROM  `thesongs` WHERE UNIX_TIMESTAMP( ScheduledActivationDateTime ) < UNIX_TIMESTAMP( ) ORDER BY ScheduledActivationDateTime DESC LIMIT 0, %d', MAX_READBEHIND_SONGS));
    $readahead = mysql_query(sprintf('SELECT SongID, RemoteSongLocation, SongTitle, UNIX_TIMESTAMP( ScheduledActivationDateTime ) AS ActivateAfterUnixTime FROM  `thesongs` WHERE UNIX_TIMESTAMP( ScheduledActivationDateTime ) > UNIX_TIMESTAMP( ) ORDER BY ScheduledActivationDateTime ASC LIMIT 0, %d', MAX_READAHEAD_SONGS));
    
    $songsForClient = array();
    while ($row = mysql_fetch_assoc($readbehind)) {
        $songsForClient[] = $row;
    }
    while ($row = mysql_fetch_assoc($readahead)) {
        $songsForClient[] = $row;
    }
    

1 个答案:

答案 0 :(得分:1)

您可以使用union

连接两个语句

http://dev.mysql.com/doc/refman/5.5/en/union.html

或者您只需选择所有内容并使用WHERE SongID != ' . $id

排除当前播放的内容

您可能需要检查其中一个SongID是否被多次使用,或者使用另一个sql列