SQL只计算一年

时间:2013-08-04 02:02:00

标签: php sql date count

我尝试了几件事,但我找不到一种方法来过滤这段代码,一次只显示一年的节目。我添加了WHERE语句和语句,如:

 DATE_FORMAT(show_date, '%Y') = 2013

但似乎没有任何效果,它只是错误代码而没有显示任何内容......

 $mostplayed = mysqli_query($con,"SELECT tbl_shows.song_id, tbl_songs.song_name,    
 count(tbl_shows.song_id) as cnt, MID(song_name,1,35) as short_name, tbl_shows.show_date
 FROM tbl_shows LEFT JOIN tbl_songs 
 ON tbl_shows.song_id = tbl_songs.song_id
 GROUP by tbl_shows.song_id
 ORDER by count(tbl_shows.song_id) desc
 LIMIT 5");

  echo "<table style='float: left; height:150px; margin-right:30px;'>";
  echo "<tr style='background-color:transparent;'>";
  echo "<td>";
  echo "<h4>Most Played Songs:</h4>";

  while($row = mysqli_fetch_array($mostplayed))

  {
  echo $row['short_name'];
  echo "  (" .  $row['cnt'].")</br>"; 
  }
  echo "</td></tr></table>";

代码本身返回Song,然后是括号中的计数。任何人都可以指出我如何只显示一年一次过滤基于song_date年份的数据?谢谢。任何帮助,将不胜感激。

上面的代码工作但是从两年开始抓住所有数据...... 下面的代码没有回复

SELECT tbl_shows.song_id, tbl_shows.show_date, tbl_songs.song_name, 
count(tbl_shows.song_id) as cnt, MID(song_name,1,35) as short_name
FROM tbl_shows LEFT JOIN tbl_songs WHERE show_date BETWEEN '2013-01-01' AND '2013-12-31'
ON tbl_shows.song_id = tbl_songs.song_id
GROUP by tbl_shows.song_id
ORDER by count(tbl_shows.song_id) desc
LIMIT 5

我会尽快汇总一些数据点......

4 个答案:

答案 0 :(得分:1)

更新我相信您的查询应该如下所示

SELECT tbl_shows.song_id, 
       tbl_songs.song_name,    
       COUNT(tbl_shows.song_id) cnt, 
       MID(tbl_songs.song_name,1,35) short_name, 
       tbl_shows.show_date
  FROM tbl_shows RIGHT JOIN tbl_songs 
    ON tbl_shows.song_id = tbl_songs.song_id
   AND tbl_shows.show_date BETWEEN '2013-01-01' AND '2013-12-31'
 GROUP BY tbl_shows.song_id
 ORDER BY COUNT(tbl_shows.song_id) DESC
 LIMIT 5

示例输出:

| SONG_ID |   SONG_NAME | CNT |  SHORT_NAME |                    SHOW_DATE |
----------------------------------------------------------------------------
|     568 | Song Name D |   2 | Song Name D |  July, 19 2013 00:00:00+0000 |
|      51 | Song Name A |   2 | Song Name A | April, 24 2013 00:00:00+0000 |
|      13 | Song Name E |   1 | Song Name E |  July, 19 2013 00:00:00+0000 |
|     368 | Song Name B |   1 | Song Name B |  July, 19 2013 00:00:00+0000 |
|     168 | Song Name C |   1 | Song Name C |  June, 28 2013 00:00:00+0000 |

这是 SQLFiddle 演示

答案 1 :(得分:0)

你可以尝试一下,让我知道它是否有效?

YEAR(SHOW_DATE)= 2013

答案 2 :(得分:0)

用户@ user2510115表示应该有效。 以下是样本数据的快照,其中包含2013年的4条记录3条记录和2014年的1条记录

enter image description here

这是过滤后的数据

enter image description here

答案 3 :(得分:0)

进行日期范围查询的最佳方法是:

where yourfield >= the starting date
and yourfield < the day after the end date

第一个原因是准确性。如果您的日期包含时间组件,则此查询仍会提供所需的结果。第二是速度。使用

等功能
where DATE_FORMAT(show_date, '%Y') = 2013

where YEAR(show_date)=2013

很慢。