diff --git a/lib/models/segments.js b/lib/models/segments.js index 8efd9b55..b0629a34 100644 --- a/lib/models/segments.js +++ b/lib/models/segments.js @@ -575,14 +575,18 @@ module.exports.getQuery = (id, prefix, callback) => { break; case 'number': if (rule.value.range) { + let ruleval = ''; if (rule.value.start) { - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); + ruleval = prefix + '`' + rule.columnType.column + '` >= ?'; values.push(rule.value.start); } if (rule.value.end) { - query.push(prefix + '`' + rule.columnType.column + '` < ?'); + ruleval = (ruleval ? '(' + ruleval + ' AND ' : '') + prefix + '`' + rule.columnType.column + '` < ?' + (ruleval ? ')' : ''); values.push(rule.value.end); } + if (ruleval) { + query.push(ruleval); + } } else { query.push(prefix + '`' + rule.columnType.column + '` = ?'); values.push(rule.value.value); @@ -592,38 +596,37 @@ module.exports.getQuery = (id, prefix, callback) => { if (rule.value.range) { let start = rule.value.start || '01-01'; let end = rule.value.end || '12-31'; - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); + query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)'); values.push(getDate('2000-' + start)); - query.push(prefix + '`' + rule.columnType.column + '` < ?'); values.push(getDate('2000-' + end, true)); } else { - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); - query.push(prefix + '`' + rule.columnType.column + '` < ?'); + query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)'); values.push(getDate('2000-' + rule.value.value)); values.push(getDate('2000-' + rule.value.value, true)); } break; case 'date': if (rule.value.relativeRange) { + query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)'); // start - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); values.push(getDate(getRelativeDate(rule.value.start, rule.value.startDirection))); - // end - query.push(prefix + '`' + rule.columnType.column + '` < ?'); values.push(getDate(getRelativeDate(rule.value.end, rule.value.endDirection), true)); } else if (rule.value.range) { + let ruleval = ''; if (rule.value.start) { - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); + ruleval = prefix + '`' + rule.columnType.column + '` >= ?'; values.push(getDate(rule.value.start)); } if (rule.value.end) { - query.push(prefix + '`' + rule.columnType.column + '` < ?'); + ruleval = (ruleval ? '(' + ruleval + ' AND ' : '') + prefix + '`' + rule.columnType.column + '` < ?' + (ruleval ? ')' : ''); values.push(getDate(rule.value.end, true)); } + if (ruleval) { + query.push(ruleval); + } } else { - query.push(prefix + '`' + rule.columnType.column + '` >= ?'); - query.push(prefix + '`' + rule.columnType.column + '` < ?'); + query.push('(' + prefix + '`' + rule.columnType.column + '` >= ? AND ' + prefix + '`' + rule.columnType.column + '` < ?)'); values.push(getDate(rule.value.value)); values.push(getDate(rule.value.value, true)); }