0

最近私を助けてくれた人たちに感謝したいです。私は自分の目標にかなり近づいていますが、コーディングの知識でいくつかの障害にぶつかり続けています。このテーブルを作成するコードがありますが、CSHOW 列が間違っています。

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

これは、次のデータとコードを照会することによって検出されます。

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);

コード

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 の間に再生されたショーの数を数えようとしています....そしてその行の値を返します。誰かが私を正しい方向に向けることができますか? ありがとうございました。SQLFiddle http://sqlfiddle.com/#!2/57d96/34

4

2 に答える 2

0

PHPを使用していますか?php にタグを付けましたが、上記の PHP への参照はありません。

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

mysql_num_rows() は結果の行数を返します (mysql_query を呼び出した後)

編集:SQLクエリですべてを実行しようとしているようです。前の日付をどのように設定する必要がありますが、追加のクエリで count を使用します。それが最善の方法かどうかはわかりません。

于 2013-08-04T22:59:09.070 に答える
0

PHP を使用して Web サイトを作成する場合は、Devon が言ったように 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

クエリのレコード数を表示する列を 1 つ持つことができると思いますが、それは良い考えではないと思います。PHP を使用するため、代わりに mysql_num_rows を使用することをお勧めします。

于 2013-08-04T23:37:59.517 に答える