MySQL语法中的节点JS解析错误

时间:2016-03-30 12:55:37

标签: mysql node.js

在下面的代码中,我试图基于三个参数(搜索类型,搜索项,在一个查询中连接不同搜索类型的运算符)查询数据库。正如您所看到的,我为它提供了两种搜索类型及其术语,因此查询将类似于搜索,其中作者是WayneRooney,标签是UCL。之后,它可能有两种以上的搜索类型,例如基于作者x,作者y,提及z和标记a的搜索。

    var search = ['Author','Tag'];
    var term = ['WayneRooney','UCL'];
    var operator = 'AND';

    var queryString = "select Tweet.ID, Tweet.Label, Tweet.TDate, Tweet.RetweetID, User.Name, User.ScreenName from Tweet, User where";

    for(var i in search){
        if(search.indexOf(search[i]) != 0){ 
            queryString += operator;
        }

        if(search[i] == 'Author')
        {
            queryString += "Tweet.UserID IN (select ID from User where ScreenName = '"+ term[i] +"') AND User.ID IN (select ID from User where ScreenName = '"+ term[i] +"')";
        }
        else if(search[i] == 'Mention')
        {
            queryString += "select Tweet.ID, Tweet.Label, Tweet.TDate, User.ScreenName, User.Name, Tweet.RetweetID from Tweet, User where Tweet.ID IN (select TweetID from TweetMention where UserID IN (select ID from User where ScreenName = '"+ term[i] +"')) AND User.ID = Tweet.UserID";
        }
        else if(search[i] == 'Tag')
        {
            queryString += "select Tweet.ID, Tweet.Label, Tweet.TDate, User.Name, User.ScreenName, Tweet.RetweetID from Tweet, User where Tweet.ID IN (select TweetID from TweetHashs where HashID IN (select ID from Hashtag where Label = '"+ term[i] +"')) AND User.ID = Tweet.UserID";
        }
    };

    var query = connection.query(queryString, function(err, rows) {
        if (err) {
            throw (err);
        }
        console.log(rows);
        //res.write(JSON.stringify(rows));
        var tweet = JSON.parse(JSON.stringify(rows));
        var queries_made = 0;
        var queries_success = 0;

我得到的错误是:

Error: ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.UserID IN (select ID from User where ScreenName = 'WayneRooney') AND User.ID IN'at line 1

我试图弄清问题是什么,但我不能。

1 个答案:

答案 0 :(得分:3)

在追加到queryString时,您错过了前置空格,否则您会获得以下常用关键字:whereTweet.UserID IN ...ANDTweet.UserID IN ...