我尝试了几件事,但我找不到一种方法来过滤这段代码,一次只显示一年的节目。我添加了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
我会尽快汇总一些数据点......
答案 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条记录
这是过滤后的数据
答案 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
很慢。