PHP MYSQL基于日期月份获取列
我甚至不知道怎么问这个问题 因此有一个数据库,其中的列是一年中的月份:PHP MYSQL基于日期月份获取列,php,mysql,Php,Mysql,我甚至不知道怎么问这个问题 因此有一个数据库,其中的列是一年中的月份: 1月| 2月| 3月 然后,每列都有其值: jan1 | feb1 | mar1 jan2 | feb 2 | mar2 jan3 | feb3 | mar3 抱歉,我不知道如何在堆栈溢出中插入表 因此,当我运行查询时,我想知道是否有一种方法可以让mysql自动识别当前月份,并使用它来选择相应的列 因此,如果当前月份为1月,则选择将如下所示: $select = "SELECT UID, JANUARY FR
1月| 2月| 3月
然后,每列都有其值:
jan1 | feb1 | mar1
jan2 | feb 2 | mar2
jan3 | feb3 | mar3
抱歉,我不知道如何在堆栈溢出中插入表
因此,当我运行查询时,我想知道是否有一种方法可以让mysql自动识别当前月份,并使用它来选择相应的列
因此,如果当前月份为1月,则选择将如下所示:
$select = "SELECT UID, JANUARY FROM table WHERE UID = '1'";
$select = "SELECT UID, ".date("F")." FROM table WHERE UID = '1'";
这将返回UID=1的1月份的列数据
但是在二月时,查询需要自动调整SELECT语句以选择二月
我甚至不确定这是否可能。我只是想看看是否有人知道是否有办法做到这一点。使用PHP内置的date()函数,指定
然后,代码将如下所示:
$select = "SELECT UID, JANUARY FROM table WHERE UID = '1'";
$select = "SELECT UID, ".date("F")." FROM table WHERE UID = '1'";
使用指定的PHP内置日期()函数
然后,代码将如下所示:
$select = "SELECT UID, JANUARY FROM table WHERE UID = '1'";
$select = "SELECT UID, ".date("F")." FROM table WHERE UID = '1'";
如果您想要纯SQL解决方案,请执行以下操作:
select uid,
case month(curdate())
when 1 then january
when 2 then february
when 3 then march
when 4 then april
when 5 then may
when 6 then june
when 7 then july
when 8 then august
when 9 then september
when 10 then october
when 11 then november
when 12 then december
end as month_data
from mytable
where uid = '1';
下面是一个。如果您想要纯SQL解决方案,请执行以下操作:
select uid,
case month(curdate())
when 1 then january
when 2 then february
when 3 then march
when 4 then april
when 5 then may
when 6 then june
when 7 then july
when 8 then august
when 9 then september
when 10 then october
when 11 then november
when 12 then december
end as month_data
from mytable
where uid = '1';
下面是一个例子。MySQL没有类似于eval()的函数,因此必须包含一些长代码,如@trincot的答案。但是,如果您不介意使用,可以采用更清晰的方式(IMHO):
MySQL没有类似于eval()的函数,因此必须包含一些长代码,如@trincot的答案。但是,如果您不介意使用,可以采用更清晰的方式(IMHO):
将月份作为列是一个错误的选择。应该取消数据透视,使其有12行,并有一个带有月号的额外键列。
选择日期格式(现在为(),“%M”)作为当前月份。
将月份作为列是一个错误的选择。应该取消数据透视,使其有12行,并有一个额外的键列,其中包含月份号。选择日期格式(现在(),'%M')作为当前月份。
所有的响应都很好,比我预期的要好。我原以为会被抨击,但这变成了一个好帖子。我同意你的答案,它奏效了。谢谢。所有的回答都很好,比我预期的要好。我原以为会被抨击,但这变成了一个好帖子。我同意你的答案,它奏效了。非常感谢。