有多个if条件时如何进行SQL查询
我正在尝试构建一个支持列表、搜索和过滤器的API。我不知道把有多个if条件时如何进行SQL查询,sql,node.js,postgresql,Sql,Node.js,Postgresql,我正在尝试构建一个支持列表、搜索和过滤器的API。我不知道把where子句放在哪里 它在某些情况下有效,但在许多情况下无效。例如,当输入主体具有搜索字段时,它将工作,但当您仅应用第二个过滤器时,即pan,在本例中,它没有工作 const query = { text: ` select master.contact.id, master.contact.name from master.contact ` }; if
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}`;
}
有不同的方法可以做到这一点。其中之一就是
Where 1=1
在您的主查询中。因此,您可以为每个条件添加和条件
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}%')`;
}
诸如此类……您可以尝试查找现有的ORM,而不是自己有条件地构建sql语句。典型的模式是,您可以根据自己的条件构建一个“数据结构”,然后这种库的工作就是将该“数据结构”转换为发送到服务器的实际SQL语句。简而言之,人们已经发明了一些东西来做这件事,所以自己再发明一次也没有什么意义;NeilLunn:这是一个老项目,在这个阶段引入ORM需要花费大量的精力和时间。我别无选择,我必须以这种方式完成它