0

我有一个问题,找不到解决方案。

我有一个简单的电视节目表,如下所示:

CREATE TABLE IF NOT EXISTS 程序 (
    id_program int NOT NULL AUTO_INCREMENT 主键,
    播出日期时间,
    标题 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

我认为在一个查询中得到你想要的东西并不容易。但我得出的结果几乎是您想要的结果:

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

这并不能完全像在 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 回答
0
select date_format(`air`,'%d-%b %h:%i') from programs
于 2013-04-11T12:07:07.417 回答