2013-09-22 29 views
0

我在尋找更新腳本,原作者不再支持 ,但遇到了我想要做的更改之一。基於字段的MySQL聲明

道歉,如果我有困難的解釋,因爲我敢肯定這是相當基本的。

我在一個文件中有一個MySQL語句,如下所示,但我現在想要 向數據庫添加一個名爲dformat的字段。

這是當前語句:

$SQL="SELECT `userid`, `score`, `summary`, `option`, DATE_FORMAT(`lastcheck`, '%d/%m/%y') AS `check` FROM `".$dbpref."users` WHERE `active`='Y' AND `id`='".intval($_GET["user"])."'"; 

我想改變的部分是該位:

DATE_FORMAT(`lastcheck`, '%d/%m/%y') AS `check` 

我希望能夠做的是檢查新領域DFORMAT和其中

DFORMAT = 1,則DATE_FORMAT(lastcheck, '%d /%米/%Y')AS check

但是其中

DFORMAT = 2然後DATE_FORMAT(lastcheck, '%M /%d /%Y')AS check

是否有可能做到以上從SQL語句本身內,而不是後?

我試圖尋找其他的例子,但是當適用於這個時,錯誤開始 所以我顯然沒有得到正確的說法。

在此先感謝!

回答

2

您可以使用CASE陳述。

$SQL="SELECT `userid`, 
       `score`, 
      `summary`, 
      `option`, 
      CASE WHEN dformat = 1 THEN DATE_FORMAT(lastcheck, '%d/%m/%y') 
        WHEN dformat = 2 then DATE_FORMAT(lastcheck, '%m/%d/%y') END AS `check` 
     FROM `".$dbpref."users` 
     WHERE `active`='Y' 
     AND `id`='".intval($_GET["user"])."'"; 
+0

+1因爲CASE幾乎適用於任何引擎。 – amenadiel

+0

@amenadiel是啊:),其一般。 –

+0

非常感謝,謝謝您的回覆! – onelove

0

在MySQL中,你可以做以下

$SQL="SELECT `userid`, `score`, `summary`, `option`, 
if(dformat=1 , 
DATE_FORMAT(`lastcheck`, '%d/%m/%y'), 
DATE_FORMAT(lastcheck, '%m/%d/%y') 
) AS  `check` FROM `".$dbpref."users` WHERE `active`='Y' 
AND `id`='".intval($_GET["user"])."'"; 

也就是說,如果DFORMAT是在表中的字段。作爲一個便箋,我希望你不是將日期存儲爲文本,而是使用合適的類型(時間戳或日期時間)來代替。

+0

非常感謝回覆,並且使用日期時間。 – onelove