2015-12-05 91 views
0

我目前正在使用node.jsnode-mysql API。MySQL如果語句

我開始通過抓取客戶端發送了這樣的所有參數:

var userId = req.query.userId; 
    var carType = req.query.carType; 
    var hasOwnership = req.query.hasOwnership; (optional parameter) 

我想打一個語句,因此,如果客戶端發送hasOwnership參數與要求,我的聲明將返回屬於他的具有特定車型的所有車輛。此類似:

SELECT * FROM cars WHERE car_type=? AND owner_id=?, [carType, userId]; 

否則,它將只返回所有匹配的車型,該車型:

SELECT * FROM cars WHERE car_type=?, [carType]; 

是否有可能完成這樣的事情在一個單一的查詢?

在此先感謝!

+0

爲什麼你想這樣做?當你有2個查詢時,數據庫使2個不同的計劃有效地執行它們。如果將它們組合在一個查詢中,它可能會**該數據庫無法計劃有效執行它。 –

回答

1

您可以短語查詢作爲這樣的事:

SELECT * 
FROM car 
WHERE (? is null or car_type = ?) AND 
     (? is null or owner_id = ?); 

需要注意的是這個版本需要每個參數兩次,除非你使用命名參數。

+0

是的!這就是我正在尋找的。謝啦 :) – Thomas

0

一個骯髒的快速解決方案是使用一個if then else。

如果hasOwnership具有價值的使用查詢#1,否則使用查詢#2