我有一個用PHP形成的大型MySQL查詢。
我不喜歡這個大IF語句在查詢中重複4次(保存在$endTrialDate
變量中)。正確使用MySQL變量
我想使它更短,更好,只是使用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
,所以沒有發現。
如何縮短查詢時間?
這是一個複雜的查詢,我們不知道你的數據庫是如何構造的或者查詢的重點是什麼。我認爲你要麼給我們更多的細節,要麼你不會得到(好的)答案。 –
@KIKOSoftware我認爲我可以簡化這一點。 我有的主要問題。當我將IF STATEMENT分配給變量時,它會在結果中顯示NULL。 我認爲這是在比較的時刻沒有分配。 –
我不確定,但我認爲MySQL中的變量是全局變量,並且不能像你一樣逐行地在「SELECT」查詢中使用它們。或者,換句話說:在所有行被選中之後執行'ORDER BY',所以變量不會有你期望的內容。 –