0

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

  1. 应该已经在应用程序中显示的项目
  2. 应该在将来某个时候显示的项目

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

1 回答 1

1

您可以使用 union 连接这两个语句

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

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

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

于 2012-04-19T15:52:14.187 回答