2013-08-04 55 views
0

我想感謝那些最近幫助過我的人。我的目標非常接近我的目標,但我一直在編碼知識中遇到一些障礙。我有創建該表的代碼,但CSHOW列出錯了。SQL計數兩個日期之間有多少條記錄,並返回該計數

CREATE TABLE tbl_songs 
    (`song_id` int, `song_name` varchar(11)); 

INSERT INTO tbl_songs 
    (`song_id`, `song_name`) 
VALUES 
    (51, 'Song Name A'), 
    (368, 'Song Name B'), 
    (168, 'Song Name C'), 
    (568, 'Song Name D'), 
    (13, 'Song Name E'); 

CREATE TABLE tbl_shows 
    (`song_id` int, `song_order` int, `show_date` datetime, `show_id` int) 
; 

INSERT INTO tbl_shows 
    (`song_id`, `song_order`, `show_date`, `show_id`) 
VALUES 
    (51, 1, '2013-07-19 00:00:00', 899), 
    (568, 2, '2013-07-19 00:00:00', 899), 
    (168, 3, '2013-07-19 00:00:00', 899), 
    (13, 4, '2013-07-19 00:00:00', 899), 
    (368, 1, '2013-07-06 00:00:00', 898), 
    (368, 1, '2013-07-03 00:00:00', 897), 
    (368, 1, '2013-05-27 00:00:00', 896), 
(51, 1, '2013-04-10 00:00:00', 895), 
(168, 1, '2013-04-10 00:00:00', 895), 
(513, 1, '2013-03-12 00:00:00', 894), 
(13, 1, '2013-03-03 00:00:00', 893); 

CODE

SELECT DATE_FORMAT(a.show_date,'%m/%d/%y') as show_date, a.song_order, a.show_id, 
b.song_name, a.song_id, (
SELECT 
IFNULL(MAX(DATE_FORMAT(show_date,'%m/%d/%y')), 'NEW SONG') 
FROM tbl_shows AS c 
WHERE a.show_date > c.show_date and a.song_id = c.song_id 
) As PrevDate, 
(
SELECT 
COUNT(*) FROM tbl_shows AS d 
where a.show_date > d.show_date 
) As cShow 

FROM tbl_shows a, tbl_songs b 
WHERE a.song_id = b.song_id 
AND a.show_id = 899 

我期待算多少節目已經在SHOW_DATE和PrevDate間奏:

| SHOW_DATE | SONG_ORDER | SHOW_ID | SONG_NAME | SONG_ID | PREVDATE | CSHOW | 
------------------------------------------------------------------------------- 
| 07/19/13 |   1 |  899 | Song Name A |  51 | 04/10/13 |  7 | 
| 07/19/13 |   2 |  899 | Song Name D |  568 | NEW SONG |  7 | 
| 07/19/13 |   3 |  899 | Song Name C |  168 | 04/10/13 |  7 | 
| 07/19/13 |   4 |  899 | Song Name E |  13 | 03/03/13 |  7 | 

這是通過查詢此數據和代碼中發現對於每首歌曲......並返回該行的該值。任何人都可以將我指向正確的方向嗎?謝謝。 SQLFiddle http://sqlfiddle.com/#!2/57d96/34

+0

在您的查詢中,您有4行具有相同的show_id。即使show_id是相同的,你是否期望計算行數? –

+0

我不想計算行......我正在計算mySQL中Show_date和PrevDate之間的節目,歌曲名稱E的例子應該有5個演出,因爲播放,歌曲名稱C應該是3節目等。我有數據點是我正在尋找的值。謝謝。 – davejt

回答

0

您使用的是PHP嗎?你標記了php,但是我沒有看到上面提到的任何PHP。

http://php.net/manual/en/function.mysql-num-rows.php

mysql_num_rows()將返回的行數的結果(你叫的mysql_query後)

編輯:我看你正在嘗試做的這一切在SQL查詢。你應該設置你如何有以前的日期,但使用另一個查詢計數。我不確定這是否是最好的方法。

+0

我查詢數據後,我把它放在網站上使用PHP – davejt

0

好吧,如果你將使用PHP的網站,使用mysql_num_rows()就像德文說。

http://php.net/manual/en/function.mysql-num-rows.php

如果你想要得到的計數在您的查詢,你可以使用COUNT():

http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

我認爲你可以有一個欄看到的記錄數您的查詢,但我也認爲這不是一個好主意。我建議你使用mysql_num_rows,因爲你會使用PHP。

+0

計數行很容易,我試圖做的只是計數show_date和prevdate之間播放的某些歌曲的節目.... – davejt

相關問題