Php 按日期分组日期

Php 按日期分组日期,php,sql,Php,Sql,我有个问题,找不到解决办法 我有一个简单的电视节目表,如下所示: monday - wednesday : 17.00 tuesday : 14.00; 如果程序不存在,则创建表( id\u程序int非空自动增量主键, 航空日期时间, 标题varchar(50) ); 以及表中的一些行: 2003-10-20 17:00 Factor 2003-10-21 17:00 Factor 2003-10-22 17:00 Factor 2003-10-20 19:00 Fo

我有个问题,找不到解决办法

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

monday - wednesday : 17.00 tuesday : 14.00; 如果程序不存在,则创建表( id\u程序int非空自动增量主键, 航空日期时间, 标题varchar(50) ); 以及表中的一些行:

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 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系数 我如何获得因子的结果,比如:

monday - wednesday : 17.00 tuesday : 14.00; 星期一至星期三:17.00 星期二:14:00;
有可能在SQL中实现这一点,还是需要在PHP中获取数据?

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

select date_format(`air`,'%d-%b %h:%i') from programs
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获得所需的结果。类似“周一、周三、周五、周六”的结果也可以用它来实现。

这并不能像MSSQL中那样准确地回答问题。我知道有很多人会这么做

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
这是一个相当草率的工作。我决不会在实时应用程序中这样做。此逻辑将由业务逻辑而不是数据库处理

数据库资源通常是可伸缩的。因此,最终,您希望尽可能少地使用它们


祝您好运

您可以使用
选择工作日(air)
您使用的SQL server是什么风格的?
从程序中选择id\u程序作为id,title,time(air)作为time,dayname(air)作为dayOfWeek,其中title='Factor'按时间顺序排列这是我获取程序及其时间的方式,但如果存在,请按照我要求的方式进行分组?您不会按照您想要的方式对其进行分组。因为如果Factor在周一17:00启用,但下周一不启用呢?如果您愿意只关注接下来的7天,这是可能的,但在PHP或任何服务器端(甚至客户端)脚本中会容易得多。Benjamin Paap使用3行代码得到了几乎相同的结果。您是正确的。遗憾的是,我使用MSSQL解决了这个问题。据我所知,那里没有MySQLs group_concat,anwyays.thnx!我会考虑你的建议。如果这是你的答案,你应该接受它作为正确的答案。