我有一个巨大的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
为空(null或0),如果date_upload不是与price
.t
相同的间隔,则date_creation
也为空
不要那样做日期数学。如果你是12月,你会要求MySQL在高端寻找2013-13-01
。使用实际的mysql日期数学:
SELECT ...
WHERE t_date_creation BETWEEN (now() - INTERVAL 1 MONTH) AND (now() + INTERVAL 1 MONTH)
对于您的查询,它是一个UPDATE查询:
UPDATE yourtable
SET date_upload = NULL, price = NULL
WHERE date_restriction_logic_here.
到目前为止,解决方案似乎是:
- > MySQL在“选择查询”中嵌套“如果”
IF(条件,值如果为真,值为假)
就像是
SELECT
t
.title
,if(t
.date_creation
> =“'。$ year .'-'。$ month .'- 01”ANDt
.date_upload
<“'。$ year .'-'。($ month + 1) .'- 01“,t
.price_paid
,'0')price_paid
,t
.date_creation
,if(t
.date_creation
> =”'。$ year .'-'。$ month .'- 01“ANDt
.date_upload
< “'。$ year。' - '。($ month + 1).'- 01”,t
.date_upload
,'')date_upload
来自table_name
ASt
WHEREt
.date_creation
> =“'。$ year。' - ' 。$ month .'- 01“ANDt
.date_creation
<”'。$ year .'-'。($ month + 1).'- 01“
和其他解决方案似乎是控制流功能
CASE值WHEN [compare_value] THEN结果[WHEN [compare_value] THEN结果...] [ELSE结果] END
发现于http://komlenic.com/254/mysql-nested-if-in-select-queries/ http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html