2015-12-11 59 views
0

我甚至不知道該怎麼問這個問題......PHP基於日期一個月MYSQL獲得列

所以有一個地方一個數據庫,其中列是一年中的月份:

January | February | March

然後每一列都有它的價值:

jan1 | feb1 | mar1 

jan2 | feb 2 | mar2 

jan3 | feb3 | mar3 

對不起,我不知道如何在堆棧溢出插入表格。

所以當我運行一個查詢時,我想知道是否有一種方法mysql可以自動識別當前月份,並使用它來選擇相應的列。

因此,如果當前的月份是一月,則SELECT是這樣的:

$select = "SELECT UID, JANUARY FROM table WHERE UID = '1'"; 

這將帶回列數據的月份,其中UID = 1

但是當它是二月,查詢需要自動調整SELECT語句以選擇February。

我甚至不確定這是否可能。我只是想看看是否有人知道是否有辦法做到這一點。

+0

這是一個不錯的選擇放個月列。它應該不旋轉到有多達12行,並帶有月份編號的額外鍵列。 – trincot

+0

'select date_format(now(),'%​​M')as cur_month' – slapyo

回答

2

如果你想要一個純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'; 

這裏是一個fiddle

+0

所有的回覆都很好,比我預期的要好。我預計會變得糟糕,但這變成了一個好帖子。我和你的答案一起去了,它工作。謝謝。 –

4

使用PHP內建的date()函數,指定here。然後

date("F") // returns full string representation of current month like "January" 

的代碼會是這個樣子:

$select = "SELECT UID, ".date("F")." FROM table WHERE UID = '1'"; 
2

MySQL沒有類似於eval()的函數,所以你必須包含一些像@ trincot的答案一樣的長代碼。但是,如果你不介意使用prepared statement它可以在更明確的方式(恕我直言)來完成:

​​