Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用单个查询在表中的某一行上方和下方选择特定数量的项_Php_Mysql - Fatal编程技术网

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

Php 使用单个查询在表中的某一行上方和下方选择特定数量的项,php,mysql,Php,Mysql,我有一个与MySQL集成的PHP脚本,可以将.plist文件发送到iPhone应用程序,该应用程序包含两种类型的项目(项目是歌曲): 应已在应用程序中显示的项目 应在将来某个时间显示的项目 我使用两个查询和一些PHP以所需的顺序获取过去和未来的项目(我希望每个项目的数量可变),这是完全可行的。主要是因为我找不到或想出一个单一的查询解决方案,不过,我很好奇你们会如何解决这个问题。是否有一个查询可以按我想要的顺序获取行?是否有一个查询以其他顺序获取行 无论如何,这里是PHP和SQL,它们获取我想要的

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

  • 应已在应用程序中显示的项目
  • 应在将来某个时间显示的项目
  • 我使用两个查询和一些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;
    }
    
    $readbehind=mysql\\查询(sprintf('SELECT SongID、RemoteSongLocation、SongTitle、UNIX\\时间戳(ScheduledActivationDateTime)作为'thesongs'的UNIX\\时间戳(ScheduledActivationDateTime)UNIX_TIMESTAMP()的activateAfterUxtime,其中UNIX_TIMESTAMP()按ScheduledActivationDateTime ASC LIMIT 0、%d',MAX_readahead___歌曲的顺序排列);
    $songsForClient=array();
    while($row=mysql\u fetch\u assoc($readbehind)){
    $songsForClient[]=$row;
    }
    while($row=mysql\u fetch\u assoc($readahead)){
    $songsForClient[]=$row;
    }
    
    您可以使用union连接这两条语句

    或者您只需选择全部并排除当前使用
    WHERE SongID!='播放的一个$id


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

    UNION查询似乎符合我的目的。绝对不想全部选择。我想,我希望找到一些SQL技巧,在一次选择中抓住这一切,这可能是愚蠢的。