我正在尝试构建一个支持,列出,搜索和过滤器的API。我不确定将where
子句放在哪里。
它在某些情况下有效,但在许多情况下无效。例如,当输入正文已进行搜索归档时,它将起作用,但是当您仅应用第二个过滤器(在这种情况下为pan
时,则不会)。
const query = {
text: `
select master.contact.id,
master.contact.name
from
master.contact
`
};
if (input.search) {
query.text += ` where
(master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
}
if (input.filters) {
const {
isActive,
pan
} = input.filters;
if (isActive !== undefined) {
query.text += ` where master.contact.isActive = ${isActive}`;
}
if (pan) {
query.text += `and master.contact.pan = ${pan}`;
}
答案 0 :(得分:1)
有多种方法可以执行此操作。其中之一就是拥有
Where 1=1
在您的主要查询中。因此,您可以为每个条件添加And条件。
const query = {
text: `
select master.contact.id,
master.contact.name
from
master.contact
where 1=1
`
};
If (input.search) {
query.text += ` and (master.contact.pan ILIKE '${input.search}%' or master.contact.ira ILIKE '${input.search}%')`;
}
依此类推...