Php SQL计数仅基于一年

Php SQL计数仅基于一年,php,sql,date,count,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_nam

我尝试过几种方法,但我找不到一种方法来过滤这些代码,使其一次只显示一个节目。我添加了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>";

我将很快收集一些数据点…

您能试试这个并告诉我它是否有效吗

YEARshow_date=2013更新了我相信您的查询应该是这样的

选择tbl_shows.song_id, tbl_歌曲。歌曲名称, COUNTtbl_shows.song_id cnt, 中段歌曲。歌曲名称,1,35短名称, tbl_shows.show_日期 从tbl_节目右键加入tbl_歌曲 在tbl_shows.song_id=tbl_songs.song_id上 和tbl_shows.show_日期介于“2013-01-01”和“2013-12-31”之间 按tbl_shows.song_id分组 按计数订购。歌曲id描述 限制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 |
下面是演示

user@user2510115所说的应该有效的方法。 以下是样本数据的快照,其中4条记录为2013年的3条记录,1条记录为2014年的1条记录

这是过滤后的数据


执行日期范围查询的最佳方法如下:

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


速度很慢

很抱歉,这不起作用,我想不出来,像这样的东西应该会起作用…@Nilesh以我的查询为例,它会起作用,为什么它对你不起作用?很抱歉,它不起作用,我的show_date是数据库中的一种日期时间格式,一切似乎都会起作用,还有其他想法吗?你能详细说明一下不起作用的意思吗?你得到了一个错误,你没有得到任何结果,你得到了意想不到的结果?这是怎么一回事?现在是展示表模式和示例数据的时候了。否则,这将是在黑暗中不断拍摄。此外,你在问题“show_date”和“song_date”中提到了两个不同的栏目。你到底想用哪一个?它属于哪一张表?还有一件事。为什么在查询中使用左连接。您是否真的有按歌曲id引用tbl_歌曲表中没有的歌曲的节目?如果你不想考虑任何节目中没有播放过的歌曲,那么它应该是RIGHT JOIN还是just JOIN。只使用show_date没有song_date…我将汇总我的表和数据,添加Where语句时没有结果,但是如果没有where语句,它就可以很好地提取所有我能看到的数据,我以前做过测试,并在我想过滤的其他地方使用了该语句。我的代码中是否存在可能已经与where语句冲突的内容?首先,查询中是否有where子句?我在原来的帖子里没有看到。第二,当你说它只是错误的代码;确切的错误是什么?我原来的帖子里没有Where语句,你是对的。代码运行良好,但正在获取两年的所有数据,我想添加一个一年一次执行的位置。当我添加where子句并运行查询时,没有显示任何内容。我不确定那里发生了什么。你能试着用一个年份列提取所有记录,然后在代码中按年份排序/过滤它们吗?
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