0

問題があり、解決策が見つかりません。

次のようなテレビ番組を含む単純なテーブルがあります。

CREATE TABLE IF NOT EXISTS プログラム (
    id_program int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    放送日時、
    タイトル varchar(50)
);

およびテーブル内のいくつかの行:

2003-10-20 17:00 ファクター
2003-10-21 17:00 ファクター
2003-10-22 17:00 ファクター
2003-10-20 19:00 フォーム
2003-10-21 14:00 ファクター

次のようなファクターの結果を取得するにはどうすればよいですか。

月曜日 - 水曜日 : 17.00
火曜日:14.00;

SQL でこれを行うことは可能ですか、それとも PHP でデータを取得する必要がありますか?

4

3 に答える 3

2

1回のクエリで必要なものを正確に取得することは容易ではないと思います。しかし、私はあなたの望む結果に近い何かに行き着きました:

SELECT TIME(air), title, GROUP_CONCAT(DAYOFWEEK(air)) 
FROM programs WHERE title = 'Factor' 
GROUP BY TIME(air)

これにより、次の結果が得られます。

TIME(air)   title   GROUP_CONCAT(DAYOFWEEK(air))
-------------------------------------------------
14:00:00    Factor  3
17:00:00    Factor  2,3,4

この結果を使用すると、php を簡単に利用して目的の結果を得ることができます。「月曜、水曜、金曜~土曜」のような結果もこれで可能です。

于 2013-04-11T12:25:35.613 に答える
0
select date_format(`air`,'%d-%b %h:%i') from programs
于 2013-04-11T12:07:07.417 に答える
0

これは、MSSQL の場合とまったく同じではありません。ただし、これを行うMySQLフレーバーがあることは知っています

declare @tempTable TABLE (dt_timeOfProgram datetime, str_name varchar(10));

insert into @tempTable values 
('2003-10-20 17:00', 'Factor'),
('2003-10-21 17:00', 'Factor'),
('2003-10-22 17:00', 'Factor'),
('2003-10-20 19:00', 'Form'),
('2003-10-21 14:00', 'Factor');

select
REPLACE(REPLACE(REPLACE(dow, '</dow><dow>', ','), '<dow>',''),'</dow>', '') as DOW
,   [time]
,   [showName]
from (  select distinct
        CAST(dt_timeOfProgram as time) as [time], 
        str_name [showName],
        (   SELECT DATENAME(dw, t1.dt_timeOfProgram) as [dow]
            FROM @tempTable t1 
            where t1.str_name=t2.str_name
            and  CAST(t1.dt_timeOfProgram as time) = CAST(t2.dt_timeOfProgram as time)
            order by t1.dt_timeOfProgram
            for XML PATH('')) [dow]
    from @tempTable t2) as t

そして、ここに結果セットがあります

Tuesday                     14:00:00.0000000    Factor
Monday,Tuesday,Wednesday    17:00:00.0000000    Factor
Monday                      19:00:00.0000000    Form

これはかなり雑な作業ですが。ライブアプリケーションでこれを行うことは決してありません。このロジックは、db ではなくビジネス ロジックによって処理されます。

一般に、データベース リソースは LEASE スケーラブルです。したがって、最終的には、それらをできるだけ使用しないようにする必要があります。

幸運を

于 2013-04-11T12:39:01.837 に答える