Mysql:使用 "OR"匹配哪些字段

标签 mysql sql node.js

我有这个查询:

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/

相关文章:

mysql - 从别名列显示 MIN、MAX 和 AVE

存储在 Microsoft SQL 中的 Python blob PDF - 转换回 PDF

mysql - 查找等值连接中的计数

sql - PostgreSQL,在存储过程中存储多个变量

node.js - 如何从 console.log 获取文本标准输出(需要 ("child_process").execSync ('ls' ))?

Node.js如何获取监听特定端口的http服务器的IP地址

mysql - SQL中的KEY是什么意思?

mysql - 为什么 puppet 在 MySQL 重启时删除 Travis CI 中的数据库?

php - 为 products.php 文件中的每个产品创建单独的 .php?id= 链接

node.js - mocha 使用 NPM test 运行,但不是常规的 mocha CLI 命令