【问题标题】:mysql node js quest -- SELECT EXISTS querymysql node js quest -- SELECT EXISTS 查询
【发布时间】:2012-12-24 14:53:33
【问题描述】:

这个逻辑有什么问题?

var selectString = 'SELECT EXISTS(SELECT 1 FROM users WHERE user="'+username+'")';

var queryUserExists = connection.query(selectString);
var resultsLength = queryUserExists._results.length;

console.log(queryUserExists);

if(resultsLength > 0){
   socket.write("fail user already exists"+"\r\n");

} else {
    console.log('insert=');
    var query = connection.query (
        'INSERT INTO users '+
        'SET user = ?, password = ?, token = ?',
        [username, password, token]
    );

    socket.write("success"+"\r\n");
}

resultsLength 始终返回零。 使用此查询的正确方法是什么?

返回对象:

sql: 'SELECT 1 FROM users WHERE user = \'a new user is my name\' ORDER BY user LIMIT 1',
typeCast: true,
nestTables: false,
_resultSet: null,
_results: [],
_fields: [],
_index: 0,
_loadError: null }

【问题讨论】:

    标签: mysql node.js select exists


    【解决方案1】:

    正确的代码:感谢https://stackoverflow.com/users/722783/mahmoud-gamal优化的数据库查询!

    connection.query("SELECT 1 FROM users WHERE user = '"+username+"' ORDER BY user LIMIT 1", function (error, results, fields) {
    if (error) {
        console.log(error);
        socket.write("fail internal error"+"\r\n");
    }
    if (results.length  > 0) {
        console.log('fail');
        socket.write("fail user already exists"+"\r\n");
    
    } else {
    
    
            console.log('insert');
            var query = connection.query (
                'INSERT INTO users '+
                'SET user = ?, password = ?, token = ?',
                [username, password, token]
            );
    
            socket.write("success"+"\r\n");
    
    
    }
    
    console.log(results);
    });
    

    【讨论】:

      【解决方案2】:

      试试这个:

      SELECT 1
      FROM users
      WHERE EXISTS (SELECT 1 
                    FROM users 
                    WHERE user = 'username')
      ORDER BY user
      LIMIT 1;
      

      或者:为什么不:

      SELECT 1
      FROM users
      WHERE user = 'username'
      ORDER BY user
      LIMIT 1;
      

      请注意:

      ORDER BY user
      LIMIT 1;
      

      只是为了性能。

      【讨论】:

      • 我将如何在节点中使用它?
      • @user1392515 - 抱歉替换var selectString = 'the query I posted';中的查询
      • nono,当然我就是这么做的。但是我的查询以前有效,得到了相同的响应。我不知道如何解析响应以确定条目是否存在。
      • @user1392515 使用新查询,您将期望只有一个返回值 1 以防找到用户,或 NULL 值,或查询未找到任何行以防万一未找到用户。我真的不知道如何使用您拥有的 node.js 代码对此进行测试,但这是基本思想。
      • 啊,很高兴知道。这是我的对象的样子,尽管gist.github.com/4500696(相关部分)说结果集为空,结果是一个空数组。数据库包含一个重复的条目,但它没有捡起它
      猜你喜欢
      • 1970-01-01
      • 2016-11-01
      • 2023-02-11
      • 1970-01-01
      • 2020-06-20
      • 2020-08-21
      • 2019-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多