我有幾個查詢具有相同的過濾器。檢索表別名
例如:
過濾:
$criteria = "AND id_student = 1 AND id_major = 2 ";
查詢1:
$query1 = "SELECT * FROM student AS t0
LEFT JOIN major AS t1 ON t0.id_major = t1.id
WHERE 1=1 ";
問題2:
$query2 = "SELECT * FROM lecturer AS t0
LEFT JOIN major AS t1 ON t0.id_major = t1.id
LEFT JOIN student AS t2 ON t2.id_major = t1.id
WHERE 1=1 "
應當運行作爲
$query1.$criteria
和
$query2.$criteria
正如你所看到的,這將產生一個查詢錯誤,因爲id_major是模糊的。
我的問題是,這個查詢在數量上非常大,所以我寧願不要硬編碼並單獨更改$ criteria和$ query。
我試圖改變$標準納入
$criteria = "AND student.id_student = 1 AND major.id_major = 2 ";
但它確實沒有更好的,它給了我的「你的意思是T0」,「你的意思是T2」的錯誤,等等。
那麼,我可以做一些類似的事情,獲得一個表的別名?所以我可以把它放在$標準中
$criteria = "AND (get-alias-code).id_student = 1 AND (get-alias-code).id_major = 2 ";
或者其他方法?
我不是這個程序的主要開發人員,只是一個錯誤修復程序,所以我不能改變這個程序的大部分內容(因爲這些查詢可能會影響另一個頁面)。
你說你是一個bug修復器 –
你在那些查詢中的WHERE子句...... WHERE 1 = 1',真的嗎?我知道的唯一情況是盲目的SQL注入攻擊。 – ciruvan
你可以使用's as'作爲別名,'m'作爲別名,並且將$ criteria寫爲's.id_student = 1和m.id_major = 2',或者根本不使用別名而使用$ criteria,比如'student .id_student = 1 AND major.id_major = 2' –