2013-01-10 37 views
1

这个逻辑有什么问题?mysql node js quest - SELECT EXISTS查询

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 } 

回答

2

正确的代码:感谢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; 

只是为了表现。

+0

我该如何在节点中使用它? – stackOverFlew

+0

很高兴知道关于性能的评论,虽然 – stackOverFlew

+1

@ user1392515 - 抱歉替换'var selectString ='查询我发布了';' –