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

标签 php mysql

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

  1. 应已在应用中显示的项目
  2. 应在未来某个时间显示的项目

我使用两个查询和一些 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/

相关文章:

php - 唯一索引中 url 的 md5 哈希值

mysql - 只需要从日期时间字段按日期从 MySQL 数据库中获取记录

php - 错误 : number of bound variables does not match number of tokens

php - 如何使用 jQuery 将不同的 FontAwesome 图标填充到 WordPress 类别列表中?

php - 请求的包存在,但这些包被您的约束拒绝

php - 多搜索查询php

php - 从联系人表查询插入到发件箱表

php - 无法从网页中获取一些标题

php - 使用 Symfony2 处理统计数据

php - 在 php while 循环中重复按钮