我有一個來自 MariaDB 視圖的非常簡單的查詢:SELECT c.amount, c.discount FROM factors_view as cWHERE c.factor_id = 358當我在 HeidiSQL 中運行這個查詢時,我得到了這個結果:amount = 16000, discount = 1200但是在 Laravel 5.7 原始查詢中$result = \DB::select(" SELECT c.amount,c.discount FROM factors_view as c WHERE c.factor_id = 358");結果:amount = 16000, discount = 0當我將參數放在引號之間時:$result = \DB::select(" SELECT c.amount,c.discount FROM factors_view as c WHERE c.factor_id = '358'");結果:amount = 16000, discount = 1200c.factor_id 的類型是int(10) unsigned。這對我來說很奇怪;因為區別在于查詢條件,而不是選擇!輸出是在特定列上具有零值的同一行!有誰知道發生了什么事?這是我對這兩個查詢的查詢日志:1)query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?"bindings:[0:358]2)query:"select `c`.`amount`, `c`.`discount` from `factors_view` as `c` where `c`.`factor_id` = ?"bindings:[0:"358"]
2 回答

千萬里不及你
TA貢獻1784條經驗 獲得超9個贊
最后,我找到了這個麻煩錯誤的原因。為了更正錯誤,我在視圖中更改了 factor_id 的類型:
CAST(factor_id AS UNSIGNED) AS factor_id
它工作正常。
雖然錯誤已修復,但我仍然沒有意識到這種行為。where 條件必須影響行,而不是單元格的值。這可能是一個學說/dbal 錯誤?!

喵喵時光機
TA貢獻1846條經驗 獲得超7個贊
請提供SHOW CREATE TABLE。
我想那factor_id是VARCHAR應該的時候INT。
int_col = 123 -- can use index
int_col = '123' -- can use index
char_col = 123 -- 123 dominates; must check all rows, converting char_col to int
char_col = '123' -- can use index
- 2 回答
- 0 關注
- 114 瀏覽
添加回答
舉報
0/150
提交
取消