浓缩一系列mySQL查询
Condensing series of mySQL queries
我有一系列查询来查找给定用户名的问题。查询在用户表中查找与用户名关联的userID,然后在user_question表中查找附加到userID的questionID,然后查找附加到questionID的question。
因为我的数据库结构遵循第二种范式,并将不同的实体存储在不同的表中(用户、问题等),所以需要跨多个表进行多个查询。
是否可以将一系列查询压缩为1)需要更少代码和2)需要更少查询的内容?
username = escape(req.query.username);
client.query("SELECT userID FROM user WHERE username = '"" + username + "'"", function(err, result) {
if (err !== null) {
console.log(err);
}
else {
client.query("SELECT questionID FROM user_question WHERE userID = " + result[0]["userID"], function(err, result) {
if (err !== null) {
console.log(err);
}
else {
client.query("SELECT question FROM question WHERE questionID = " + result[0]["questionID"], function(err, result) {
if (err !== null) {
console.log(err);
}
else {
//handle question
}
});
});
});
编辑:K.巴斯蒂安给出了正确的答案。现在使用的代码是:
var query =
`SELECT
q.question
FROM
question q
JOIN user_question uq ON q.questionID = uq.questionID
JOIN user u ON u.userID = uq.userID
WHERE
u.username = '"` + username + `'"`;
client.query(query, function(err, result) {
//Handle
});
EDIT:在K.Bastian也指出节点mysql库能够转义用户输入字符串(而不是JS执行函数)之后,我也实现了这一点,进一步简化了代码。
var query =
`SELECT
q.answer
FROM
question q
JOIN user_question uq ON q.questionID = uq.questionID
JOIN user u ON u.userID = uq.userID
WHERE
u.username = ` + client.escape(req.query.username);
client.query(query, function(err, result) {
//Handle result...
});
您可以将查询放入一个。。。
像这样的东西?
select
q.question
from
question q
JOIN user_question uq ON q.questionID = uq.questionID
JOIN user u ON u.userID = uq.userID
WHERE
u.username = '"" + username + "'"
顺便说一下。。。这看起来像是一个潜在的sql注入部分''"+用户名+"''"
相关文章:
- 在node.js-mysql中执行UPDATE查询不起作用
- 更新从Mysql查询检索到的数据?Node.js节点mysql
- 浓缩一系列mySQL查询
- 如何翻译MySQL查询's ResultSet转换为整数
- 如何在mysql查询(NODE.js)中重复使用一个参数
- onclick->mysql查询->javascript;同一页
- 向更新mysql查询传递一个id
- 如何在下拉列表更改时自动填充mysql查询结果中的文本框值
- mysql查询一次在单个查询中的多个表中插入记录
- 添加行并运行多个mySQL查询
- 如何将mysql查询的结果获取到html文本框中
- 数组数据排序类似mysql查询
- 使用jquery显示mysql查询结果
- PHP MySQL 在一个页面和一个查询中插入具有多行的数据
- 在“onexit”或“onsubmit”之后,查询mysql并填充表单字段,而无需离开页面php js
- 使用下拉列表中的值查询 MySQL 数据库,然后使用结果填充文本字段而不刷新页面
- 通过JavaScript中的PHP查询MySQL,时间间隔
- Highcharts标签格式化器查询mysql
- 限制PHP查询mysql数据库的非空行
- 使用Node.JS查询MySQL,并在网页中显示结果