Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MYSQL基于日期月份获取列_Php_Mysql - Fatal编程技术网

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')作为当前月份。
所有的响应都很好,比我预期的要好。我原以为会被抨击,但这变成了一个好帖子。我同意你的答案,它奏效了。谢谢。所有的回答都很好,比我预期的要好。我原以为会被抨击,但这变成了一个好帖子。我同意你的答案,它奏效了。非常感谢。