1

我正在尝试基于 if 语句编写 MySQL 语句。

这就是我想要做的:我需要查询来根据项目是否将在两周内到期或是否已经过期来收集行。

这是我到目前为止所拥有的:

select
  t_id,
  firstName, 
  lastName, 
  checkTime,
  due
from (checkOut join People)
where checkOut.p_id = People.p_id
order by due IF(DATE(NOW()-checkOut.due) <= 2 WEEK);

MySQL 指出 IF 语句附近存在语法错误(我并不感到惊讶,因为我不熟悉在 MySQL 中编写条件语句)。

另一个问题是关于 MySQL 是否会产生一个负数的日期(即表明一个项目已过期)。提前致谢。

4

2 回答 2

1

IF不能像你一样使用它。一种可移植的替代方法是将 a 放置CASE在条件匹配的位置ORDER BY分配 a ,如果不匹配则排序。010

select
  t_id,
  firstName, 
  lastName, 
  checkTime,
  due
from 
  checkOut 
  join People ON checkOut.p_id = People.p_id
order by 
  /* Use DATE_SUB() */
  /* This will sort those not yet past due ahead of those already past due. 
     If this is the opposite of what you want, switch the 0 and 1 */
  CASE WHEN DATE_SUB(CURDATE(), INTERVAL 2 WEEK) <= checkOut.due THEN 0 ELSE 1 END;

WHERE请注意,我已通过将子句更改为子句,将您的隐式连接转换为显式连接ON

于 2012-11-04T21:15:47.043 回答
1

我想你要找的是这个,

SELECT t_id, 
       firstname, 
       lastname, 
       checktime, 
       due 
FROM   checkout 
       JOIN people 
         ON checkout.p_id = people.p_id 
ORDER  BY CASE 
            WHEN ( Now() - INTERVAL 2 week ) <= checkout.due THEN 0 
            ELSE 1 
          END, 
          due 
于 2012-11-04T21:16:10.537 回答