【发布时间】:2020-10-05 05:51:56
【问题描述】:
我正在构建对我的数据库的查询以返回一些数据。这是上一篇文章的链接,描述了我的意图Finding database data that best fits user variable responses。我想返回每个数据对象的所有列,但是返回的 id 不正确,并且正在返回一个额外的 VALUE 字段。
我的数据库是这样设置的 场地
id name parking decorations hotel
1 park 1 2 1
2 beach 1 2 2
3 theater 2 2 2
4 yard 2 1 1
还有一个枚举表
id value
1 TRUE
2 FALSE
3 MAYBE
我正在后端构建一个查询,如下所示:
let searchConstraintsTrue = 'WHERE';
let firstItemTrue = 0;
for (const prop in req.body) {
if (req.body[prop] === 'TRUE') {
if (firstItemTrue === 0) {
searchConstraintsTrue += ` ${prop} = 1`;
firstItemTrue++;
} else {
searchConstraintsTrue += ` AND ${prop} = 1`;
}
}
}
let searchConstraintsMaybe = 'ORDER BY';
let firstItemMaybe = 0;
for (const prop in req.body) {
if (req.body[prop] === 'MAYBE') {
if (firstItemMaybe === 0) {
searchConstraintsMaybe += ` (${prop} = 1)::integer`;
firstItemMaybe++;
} else {
searchConstraintsMaybe += ` + (${prop} = 1)::integer`;
}
}
}
res.setHeader('Access-Control-Allow-Origin', 'http://localhost:3000');
let sqlText = `SELECT * FROM venues
INNER JOIN response_enum rp ON rp.id = venues.parking
INNER JOIN response_enum rd ON rd.id = venues.decorations
INNER JOIN response_enum rh ON rh.id = venues.hotel
${searchConstraintsTrue} ${searchConstraintsMaybe} DESC`;
我意识到我的 searchConstraintsTrue 和 searchConstraintsMaybe 没有正确使用枚举表,但现在我只是想让事情正常工作。
示例响应如下所示:
[ {
id: 1,
name: 'beach',
parking: 1,
decorations: 2,
hotel: 1,
value: 'TRUE'
},
{
id: 2,
name: 'yard',
parking: 1,
decorations: 2,
hotel: 2,
value: 'FALSE'
}]
所以我返回了所需的数据,但是 id 不正确,并且我的数据库中不存在一个值列。
【问题讨论】:
-
value和id来自连接表。完全限定您的选择字段。SELECT v.id, v.name, ... FROM venues v ... -
谢谢!这似乎有效
标签: node.js database postgresql backend