Php 按当前日期列出的SQL订单

Php 按当前日期列出的SQL订单,php,mysql,sql,Php,Mysql,Sql,我有一张这样的桌子,我想从当前的dayname开始订购 title date_firstcall totalViews Tag name A 2014-08-25 10:19:49 2 Monday name B 2014-08-24 16:03:36 3 Sunday name C 2014-08-24 14:54:47 2 Sunday name C 2014-08-23 11:06:19 3 Saturday name

我有一张这样的桌子,我想从当前的dayname开始订购

title   date_firstcall      totalViews  Tag
name A  2014-08-25 10:19:49     2   Monday
name B  2014-08-24 16:03:36     3   Sunday
name C  2014-08-24 14:54:47     2   Sunday
name C  2014-08-23 11:06:19     3   Saturday
name A  2014-08-23 00:05:35     16  Saturday
name B  2014-08-22 10:05:53     4   Friday
name A  2014-08-22 00:11:28     25  Friday
name C  2014-08-21 19:28:54     1   Thursday
name A  2014-08-21 08:44:05     13  Thursday
name C  2014-08-20 22:42:49     1   Wednesday
name D  2014-08-19 16:22:42     2   Tuesday
name A  2014-08-19 15:43:57     10  Tuesday
name B  2014-08-19 09:36:52     1   Tuesday
我的SQL语句不工作:

SELECT title as Seite, DAYNAME(CURRENT_DATE) AS diff,
 sum( if( Tag = 'Monday', totalViews, 0 ) ) AS Montag,
 sum( if( Tag = 'Wednesday', totalViews, 0 ) ) AS Mittwoch,
 sum( if( Tag = 'Tuesday', totalViews, 0 ) ) AS Dienstag,
 sum( if( Tag = 'Thursday', totalViews, 0 ) ) AS Donnerstag,
 sum( if( Tag = 'Friday', totalViews, 0 ) ) AS Freitag,
 sum( if( Tag = 'Saturday', totalViews, 0 ) ) AS Samstag,
 sum( if( Tag = 'Sunday', totalViews, 0 ) ) AS Sonntag
 FROM tmp  GROUP BY title ORDER BY diff
结果表首先从当天开始,然后是第二天。 比如:


Thx可提前获取任何提示。

使用
工作日
获取星期几作为数字。减去当前日期的模7,使其环绕,然后旋转

SELECT title,
       SUM(IF(WEEKDAY(date_firstcall) = WEEKDAY(NOW()), totalViews, 0)) AS current_day,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 1, totalViews, 0)) AS day_plus_1,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 2, totalViews, 0)) AS day_plus_2,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 3, totalViews, 0)) AS day_plus_3,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 4, totalViews, 0)) AS day_plus_4,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 5, totalViews, 0)) AS day_plus_5,
       SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 6, totalViews, 0)) AS day_plus_6
FROM tmp
GROUP BY title

以下是如何使用动态SQL获取日期名称:

SET @sql = (SELECT CONCAT('
     SELECT title,
            SUM(IF(WEEKDAY(date_firstcall) = WEEKDAY(NOW()), totalViews, 0)) AS ', DAYNAME(NOW()),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 1, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 1 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 2, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 2 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 3, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 3 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 4, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 4 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 5, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 5 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 6, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 6 DAY)),
    '       FROM tmp
     GROUP BY title'));
PREPARE stmt FROM @sql;
EXECUTE stmt;

请编辑您的问题,并提供您想要的输出示例。请参阅我问题的最后一行。该功能将为您安排好您的工作日。如果我了解您想要的结果,您需要查看数据透视。
Tag
是否与
WEEKDAY(date\u firstcall)
相同?为什么需要该列?它是我的视图表中的DAYNAME(date\u firstcall)。在这种情况下,这里不再需要,也不再有效。您不能使用来进行排序。您需要使用动态SQL来进行排序。使用调用SQL的应用程序语言可能更容易实现。SQL Server与此有什么关系?MySQL已经准备了创建动态SQL的
PREPARE
。我告诉过你我是初学者。我不知道如何在PHP中实现这一点。目前我做了以下操作:if($result=@mysqli_query($link,$sql))&(@mysqli_impacted_rows($link)!==0)){$entries=array();而($row=@mysqli_fetch_assoc($result)){$entries[]=$row;}$data=json_encode($entries);回声(数据);
SET @sql = (SELECT CONCAT('
     SELECT title,
            SUM(IF(WEEKDAY(date_firstcall) = WEEKDAY(NOW()), totalViews, 0)) AS ', DAYNAME(NOW()),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 1, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 1 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 2, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 2 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 3, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 3 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 4, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 4 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 5, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 5 DAY)),
    ',      SUM(IF((WEEKDAY(date_firstcall)-WEEKDAY(NOW()) % 7) = 6, totalViews, 0)) AS ', DAYNAME(DATE_ADD(NOW(), INTERVAL 6 DAY)),
    '       FROM tmp
     GROUP BY title'));
PREPARE stmt FROM @sql;
EXECUTE stmt;