На высоком уровне это звучит тривиально, но, оказывается, я почесываю голову на пару часов.MySQL SELECT с переменными полями WHERE
Ситуация:
У меня есть таблица T
с колоннами a,b,c,d,e
. Столбец a
содержит строку, в то время как у b,c,d,e
каждое значение имеет булево значение.
Я разрешаю пользователю выполнить вид , где я предлагаю пользователю ввести значения для a,b,c,d,e
и вернуть все строки, в которых все эти значения совпадают.
В идеальном мире, пользователь вводит все значения (позволяет говорить a="JavaScript"
, b="true"
, c="false"
, d="false"
, e="true"
) и полученный запрос (В Scala, ссылки на удаленную БД под управлением MySQL) может выглядеть примерно так:
connection.createStatement().executeQuery("SELECT * FROM T
WHERE a = '" + a_input + "'
and b = " + b_input + "
and c = " + c_input + "
and d = " + d_input + "
and e = " + e_input + ";")
Проблема:
я дать пользователю возможность «разрыхления» ограничений, поэтому вполне возможно, что a_input = «» и b_input = «», и т.д. ... Потенциально все поля а, б, в, г, д может быть пустым («») Если поле опущено, оно не должно влияют на полученный ответ. Другими словами, если c
не введен, то результат может содержать записи, где c
является ИСТИНА или FALSE
Вопрос:
Как написать ONE запрос, который описывает ситуацию, потенциально все поля могут быть пустыми, или просто некоторые, или нет?
так: 'где (b_input = '' или Ь = b_input) и (...)' –