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