我有一个由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
,因此未找到任何内容。
如何缩短此查询?
答案 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
会为您提供逐行工作的变量。