我有这个查询:
SELECT * FROM accounts WHERE username = "aaa" OR email = "abc@example.com" OR mobile = "123456789"
我可以像这样找到哪个字段匹配:
var username = req.body.username;
var email = req.body.email;
var mobile = req.body.mobile;
database.query("SELECT * FROM accounts WHERE username = ? OR email = ? OR mobile = ?",[username, email, mobile, (err, result)=>{
if (result.username == username) {...}
if (result.email == email) {...}
if (result.mobile == mobile) {...}
}
但是,我想知道哪个字段在不多次使用 if
的情况下匹配(如果可能)。那么,这种形式只能在 Mysql 中使用吗?
最佳答案
您可以将其放入SELECT
列表中。您可以使用 CONCAT_WS()
将列列表合并为逗号分隔的列表。它将省略 NULL
值,因此只会列出匹配的字段。
database.query(`SELECT *,
CONCAT_WS(',',
IF(username = ?, 'username', NULL),
IF(email = ?, 'email', NULL),
IF(mobile = ?, 'mobile', NULL)) AS matched_fields
FROM accounts WHERE username = ? OR email = ? OR mobile = ?`, [username, email, mobile, username, email, mobile], (err, result) => {
var matched = result.matched_fields.split(',');
matched.each(field => {
switch(field) {
case 'username': ...; break;
case 'email': ...; break;
case 'mobile': ...; break;
});
})
关于Mysql:使用 "OR"匹配哪些字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58926398/