2013-08-04 53 views
0

我已經嘗試了幾件事情,但我找不到一種方法來過濾此代碼,以便一次只顯示一年顯示。我已經添加了WHERE語句,語句,如:僅基於一年的SQL計數

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_date年的數據?謝謝。任何幫助,將不勝感激。

上面的代碼工作,但抓住所有的數據由兩年... 下面的代碼返回Nothing

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 

我拉在一起不久,一些數據點...

回答

1

修訂我相信您的查詢應該是這樣的

輸出示例:

 
| 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演示

+0

抱歉沒有工作,我的show_date是一個數據庫中的日期時間格式,一切似乎它會工作,任何其他的想法? – davejt

+0

你能否詳細闡述一下*不起作用的意思?你得到一個錯誤,你沒有得到任何結果,你會得到意想不到的結果?它是什麼?恕我直言,您需要時間展示表格模式和樣品數據。否則它會在黑暗中不斷拍攝。 – peterm

+0

另請參閱問題'show_date'和'song_date'中的兩個不同列。你究竟在嘗試使用哪一個,它屬於哪個表? – peterm

0

你可以試試這個,讓我知道它是否工作?

YEAR(SHOW_DATE)= 2013

+0

對不起,沒有工作,我無法弄清楚,這樣的事情應該工作... – davejt

+0

@Nilesh顯示我的查詢爲例,它的工作原因爲什麼它不適合你? – user2510115

0

user @ user2510115表示應該工作。 這裏是樣本數據的4個記錄3條記錄的2013年和2014年

enter image description here

1個錄快照,這裏是過濾後的數據

enter image description here

+0

我可以看到,這將工作,我做過測試之前,並使用該語句我想過濾歲月的其他地方有我的代碼中可能已經與Where語句衝突的東西? – davejt

+0

首先你在查詢中有where子句嗎?我沒有看到它原來的帖子。其次,當你說它只是錯誤的代碼;什麼是確切的錯誤? – Nilesh

+0

我原來的帖子裏沒有Where語句,你是對的。該代碼工作正常,但是抓取了兩年來的所有數據,我想每次添加一年的地點。當我添加一個where子句並運行查詢時,什麼也沒有顯示出來。 – davejt

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 

是緩慢的。