0

所以 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>";
4

1 回答 1

0

Try this for the first part (NEW SONG)

 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
于 2013-08-02T18:30:49.760 回答