正确使用MySQL变量

时间:2017-08-28 11:25:05

标签: php mysql sql

我有一个由PHP构成的大型MySQL查询 我不喜欢这个大的 IF语句在查询中重复4次(保存在$endTrialDate变量中)。

我想让它更短更好,只使用MySQL变量。

我的查询(已编辑并已简化)

$endTrialDateCondition = "IF(ec.extend_trial_type LIKE 'week',
        ADDDATE(ec.start_contract, (7 * ec.extend_trial_time)),
          IF(ec.extend_trial_type LIKE 'day',
            ADDDATE(ec.start_contract, ec.extend_trial_time),
            ADDDATE(ec.start_contract, INTERVAL ec.extend_trial_time MONTH)
          )
        )";

$endTrialDate = "(SUBDATE((".$endTrialDateCondition."), 1))";

$finalQuery = "SELECT e.firstname_employe, e.lastname_employe,
  ".$endTrialDate." as end_trial_date
    FROM employe_contract ec
    LEFT JOIN employe e ON ec.id_employe = e.id_employe
    WHERE ".$endTrialDate." >= ?
    AND ".$endTrialDate." <= ?
    ORDER BY ".$endTrialDate.", e.lastname_employe, e.firstname_employe";

当我尝试修改我的查询时:(使用变量@end_trial_date)

$finalQuery = "SELECT e.firstname_employe, e.lastname_employe,
  @end_trial_date := ".$endTrialDate." as end_trial_date
    FROM employe_contract ec
    LEFT JOIN employe e ON ec.id_employe = e.id_employe
    WHERE @end_trial_date >= ?
    AND @end_trial_date <= ?
    ORDER BY @end_trial_date, e.lastname_employe, e.firstname_employe";

结果中的end_trial_date为NULL,因此未找到任何内容。

如何缩短此查询?

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

$finalQuery = "SELECT e.firstname_employe, e.lastname_employe,
 ".$endTrialDate." as end_trial_date
    FROM employe_contract ec
    LEFT JOIN employe e ON ec.id_employe = e.id_employe
    WHERE end_trial_date >= ?
    AND end_trial_date <= ?
    ORDER BY end_trial_date, e.lastname_employe, e.firstname_employe";

我不确定这会执行,但它比你的更好。基本上as会为您提供逐行工作的变量。