Skip to content

Instantly share code, notes, and snippets.

@alextanhongpin
Last active November 9, 2017 08:06
Show Gist options
  • Save alextanhongpin/55e4bbceb25af0c07f922bddf545680a to your computer and use it in GitHub Desktop.
Save alextanhongpin/55e4bbceb25af0c07f922bddf545680a to your computer and use it in GitHub Desktop.
Simple code to concatenate multiple conditions for mysql statement
const conditions = [
['', '', ''],
['A', '', ''],
['', 'B', ''],
['', '', 'C'],
['A', 'B', ''],
['', 'B', 'C'],
['A', '', 'C'],
['A', 'B', 'C'],
].forEach(([param1, param2, param3]) => {
const stmt = [
'SELECT * FROM X',
param1 ? 'WHERE param1 = ?' : '',
param2 ? [param1 ? 'AND' : 'WHERE', 'param2 = ?'].join(' ') : '',
param3 ? [param1 || param2 ? 'AND' : 'WHERE', 'param3 = ?'].join(' ') : '',
].reduce((a, b) => [a.trim(), b.trim()].join(' '), '')
console.log(stmt)
})
// SELECT * FROM X
// SELECT * FROM X WHERE param1 = ?
// SELECT * FROM X WHERE param2 = ?
// SELECT * FROM X WHERE param3 = ?
// SELECT * FROM X WHERE param1 = ? AND param2 = ?
// SELECT * FROM X WHERE param2 = ? AND param3 = ?
// SELECT * FROM X WHERE param1 = ? AND param3 = ?
// SELECT * FROM X WHERE param1 = ? AND param2 = ? AND param3 = ?
function fun(criterias, param, name) {
if (param) {
if (criterias.length > 0) {
criterias.push('AND');
} else {
criterias.push('WHERE');
}
criterias.push(name + ' = ?');
}
};
const param1 = 'A'
const param2 = 'B'
const param3 = 'C'
let criterias = [];
fun(criterias, param1, 'param1');
fun(criterias, param2, 'param2');
fun(criterias, param3, 'param3');
const stmt = ['SELECT * FROM X'].concat(criterias).join(' ');
console.log(stmt);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment