所以 m.zam 找到了答案。非常感谢。任何人都可以更进一步吗?这是两张桌子。我现在正在尝试做两件事,将返回的空日期替换为“新歌曲”,并且我正在尝试找出自上次播放歌曲以来已经播放了多少节目。
song_id song_name
51 | Song Name A
368 | Song Name B
168 | Song Name C
568 | Song Name D
13 | Song Name E
song_id | song_order| show_date |show_id
368 | 1 | 2010-02-17 00:00:00 | 367
368 | 0 | 2012-04-06 00:00:00 | 499
51 | 2 | 2012-01-19 00:00:00 | 399
51 | 2 | 2013-04-24 00:00:00 | 870
51 | 8 | 2013-07-19 00:00:00 | 899
368 | 2 | 2013-07-19 00:00:00 | 899
13 | 5 | 2013-07-19 00:00:00 | 899
568 | 2 | 2013-07-19 00:00:00 | 899
368 | 4 | 2012-06-08 00:00:00 | 799
168 | 2 | 2013-06-28 00:00:00 | 896
568 | 2 | 2013-07-03 00:00:00 | 897
568 | 2 | 2010-02-21 00:00:00 | 897
我下面的代码正在努力返回这个,但我需要更多数据。我希望将第一张桌子变成第二张桌子。先谢谢了!代码可以在这里找到:http ://sqlfiddle.com/#!2/f3e29/1
第一的
SHOW_DATE | SHOW_ID | SONG_NAME | SONG_ID | PREVDATE |
July, 19 2013 | 899 | Song Name A | 51 | April, 24 2013 |
July, 19 2013 | 899 | Song Name B | 368 | June, 08 2012 |
July, 19 2013 | 899 | Song Name E | 13 | (null) |
July, 19 2013 | 899 | Song Name D | 568 | July, 03 2013 |
第二
SHOW_DATE | SHOW_ID | SONG_NAME | SONG_ID | PREVDATE | SHOWS SINCE
July, 19 2013 | 899 | Song Name A | 51 | April, 24 2013 | 2
July, 19 2013 | 899 | Song Name B | 368 | June, 08 2012 | 4
July, 19 2013 | 899 | Song Name E | 13 | NEW SONG | 0
July, 19 2013 | 899 | Song Name D | 568 | July, 03 2013 | 0
SELECT a.show_date, a.show_id,
b.song_name, a.song_id, (
SELECT
IFNULL(MAX(show_date),'NEW SONG')
FROM tbl_shows AS c
WHERE a.show_date > c.show_date and a.song_id = c.song_id
) As PrevDate
FROM tbl_shows a, tbl_songs b
WHERE a.song_id = b.song_id
AND a.show_id = 899
虽然 IFNULL 在 SQL 中工作,但我使用 PHP 将返回日期的格式更改为更像 mm/dd/yy 的格式,我可以在将日期发送到 PHP 之前更改 SQL 中的日期还是在 PHP 中编写 IF ELSE 语句以返回mm/dd/yy 或“新歌”
echo "<td style='padding: 10px; width:45px;'>" .date("m/d/y",
strtotime($row["PrevDate"]))." </td>";