作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一系列查询来查找给定用户名的问题。查询在用户表中查找与用户名关联的用户 ID,然后在 user_question 表中查找与用户 ID 关联的问题 ID,然后在问题表中查找与问题 ID 关联的问题。
因为我的数据库结构遵循第二范式并将不同的实体存储在不同的表中(用户、问题等),这导致需要跨多个表进行多次查询。
是否可以将一系列查询压缩为 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. Bastian 给出了正确答案。现在使用的代码是:
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
});
编辑:在 K. Bastian 还指出 node-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 注入(inject)部分...\""+ username + "\"
关于javascript - 浓缩系列 mySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225668/
你好,我正在尝试学习如何编写一个没有 else{} else if{} 条件的压缩 if 语句,其中代码打印 YES 或 NO 并在满足条件时播放提示音,我我正在尝试连接此语句。 Message =
试图找到一种方法来浓缩它。不确定最好的方法。基本上,如果满足标准,我会显示一个带有消息参数的警报。我在想也许可以在功能上尝试一下。这是更大的功能 react 组件的一部分。我也在想我是否可以找到一种方
我是一名优秀的程序员,十分优秀!