php - mysql,在以下if条件中使用if条件的结果

标签 php mysql database

是否可以在同一查询中的另一个 if 条件中使用来自 if 条件的结果“列”?我想一次获取所有文档相关数据。

SELECT d.id, d.filename, 

IF(d.document_valid_until_further_notice = 0,
    IF(d.document_valid_until = "0000-00-00", 
        DATE_ADD(d.document_date, INTERVAL 12 MONTH),
        d.document_valid_until
    ), "0000-00-00"
) AS calculated_valid_until_date,

IF(calculated_valid_until_date != "0000-00-00", 
    DATE_SUB(calculated_valid_until_date, INTERVAL 8 WEEK, 
    "0000-00-00"
) AS calculated_alert_expiring_date, 
IF(calculated_valid_until_date > CURDATE() AND calculated_valid_until_date != "0000-00-00", 1, 0) AS expired FROM documents AS d WHERE 1 ORDER BY d.document_date DESC';

现在,“calculated_valid_until_date”正确显示,例如2015-10-20,但我不能在以下 if 语句中使用该值。带或不带 @ 符号。 (@calculated_valid_until_date)。有没有办法或者我必须通过单独的查询或在客户端来完成这一切?

感谢任何想法!

最佳答案

将 的计算字段包装到派生表中,然后在从该派生表中的外部选择中引用这些计算以继续您的计算:

SELECT x.id, x.filename, 
  x.calculated_valid_until_date, 
  x.calculated_alert_expiring_date,
  -- Use the derived table to do the second round of calculations 
  IF(x.calculated_valid_until_date > CURDATE() 
    AND x.calculated_valid_until_date != "0000-00-00", 1, 0) AS expired
FROM
-- Project the first round of calculations into a derived table
(SELECT
  d.id, d.filename, d.document_date,

 IF(d.document_valid_until = '0000-00-00', DATE_ADD(d.document_date, INTERVAL 12 MONTH),
 d.document_valid_until) AS calculated_valid_until_date,

IF(d.calculated_valid_until_date != '0000-00-00', 
    DATE_SUB(d.calculated_valid_until_date, INTERVAL 8 WEEK), 
    '0000-00-00') AS calculated_alert_expiring_date

  FROM documents AS d     
) x
WHERE 1 = 1
ORDER BY x.document_date DESC;

SqlFiddle here

关于php - mysql,在以下if条件中使用if条件的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26466339/

相关文章:

php - PHP 中的静态/早期绑定(bind)与动态/后期绑定(bind)

php - 导致列计数与第 1 行的值计数不匹配的 SQL 语句有什么问题?

c# MySql 按距离选择用户

java - JavaFX 中 TableView 的排序行为

sql - 存储查找表 ID 或纯数据之间的决定

.net - 如何编辑 'bit'数据类型?

php - 在wamp上使用php从mysql数据库中随机选择

javascript - ajax 响应显示给定 id 中的结果

php - Mediawiki 错误:调用未定义的方法 User::saveToCache()

php - 在此查询多表中加入 codeigniter 表