私は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";
:結果で
$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
た(変数@end_trial_dateを使用して)、何も見つかりませんでした。
このクエリを短縮するにはどうすればよいですか?
これは複雑なクエリで、データベースの構造やクエリのポイントがわかりません。私はあなたに私達に詳細を与えなければならないと思う、またはあなたは(良い)答えを得られないだろう。 –
@KIKOSoftware私はそれを単純化できると思う。 私には大きな問題があります。変数にIF STATEMENTを代入すると、結果にNULLが表示されます。 私はそれがcomparsionの瞬間に割り当てられていないようだと思った。 –
私は確信が持てませんが、MySQLの変数はグローバルで、行ごとに 'SELECT'クエリの中でそれらをそのまま使うことはできません。あるいは、他の言葉で言えば:すべての行が選択された後に 'ORDER BY'が実行されるので、変数に期待する内容はありません。 –