我有一个与 MySQL 集成的 PHP 脚本,用于将 .plist 文件发送到包含两种类型的项目(这些项目是歌曲)的 iPhone 应用程序:
- 应已在应用中显示的项目
- 应在未来某个时间显示的项目
我使用两个查询和一些 PHP 以所需的顺序抓取过去和 future 的项目(我想要每个项目的不同数量),这是完全可行的。主要是因为我找不到或想出一个单一的查询解决方案,但我很好奇你们将如何解决这个问题。是否有一个查询可以按照我想要的顺序获取行?是否有一个查询可以按其他顺序获取行?
无论如何,这里的 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;
}
最佳答案
您可以使用 union 连接两个语句
http://dev.mysql.com/doc/refman/5.5/en/union.html
或者您只需使用 WHERE SongID != ' 选择全部并排除当前播放的歌曲。 $id
您可能需要检查其中一个 SongID 是否被多次使用,或者使用另一个 sql 列
关于php - 使用单个查询选择表中特定行上方和下方的特定数量的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10231876/