MySQL:在SELECT中添加条件

时间:2013-04-09 17:57:57

标签: php mysql select conditional-statements

我有一个巨大的SELECT,我需要做一些条件。

例如:

SELECT `t`.`title`, `t`.`price_paid`, `t`.`date_creation`, `t`.`date_upload` 
  FROM `table_name` AS `t`
 WHERE `t`.`date_creation` >= "'.$year.'-'.$month.'-01" 
   AND `t`.`date_creation` < "'.$year.'-'.($month+1).'-01"

我在PHP中声明了$ year和$ month的值,我希望其余的是在MYSQL中进行的(我有充分的理由可以在需要时详细说明)

如果date_upload与date_upload的时区间隔不同,我需要的是使price为空(null或0)和t也为空。date_creation

2 个答案:

答案 0 :(得分:1)

不要那样做日期数学。如果你是12月,你会要求MySQL在高端寻找2013-13-01。使用实际的mysql日期数学:

SELECT ...
WHERE t_date_creation BETWEEN (now() - INTERVAL 1 MONTH) AND (now() + INTERVAL 1 MONTH)

AS的查询,它是一个UPDATE查询:

UPDATE yourtable
SET date_upload = NULL, price = NULL
WHERE date_restriction_logic_here.

答案 1 :(得分:0)

到目前为止,解决方案似乎是:

- &GT; MySQL在“选择查询”中嵌套“如果”

  

IF(条件,值如果为真,值则为假)

这样的东西
  

SELECT ttitle,   if(tdate_creation&gt; =“'。$ year .'-'。$ month .'- 01”AND tdate_upload&lt;“'。 $ year。' - '。($ month + 1).'- 01“,tprice_paid,'0')为price_paid,   tdate_creation,   if(tdate_creation&gt; =“'。$ year .'-'。$ month .'- 01”AND tdate_upload&lt;“'。 $ year。' - '。($ month + 1).'- 01“,tdate_upload,'')为date_upload   来自table_name AS t   在哪里tdate_creation&gt; =“'。$ year .'-'。$ month .'- 01”   和tdate_creation&lt; “ '$年.'-'。($月+ 1).'- 01"

和其他解决方案似乎是控制流功能

  

CASE值WHEN [compare_value] THEN结果[WHEN [compare_value] THEN result ...] [ELSE result] END

http://komlenic.com/254/mysql-nested-if-in-select-queries/上找到 http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html