2015-12-05 3 views
0

В настоящее время я работаю над API, используя node.js и node-mysql.MySQL where if statement

я начинаю захватывая все параметры, которые клиент отсылает, как это:

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 if else.

если hasOwnership имеет значение использование запроса # 1 еще использовать запрос # 2