【问题标题】:Node.js MySQL: Select-statement depending on query string?Node.js MySQL:选择语句取决于查询字符串?
【发布时间】:2015-04-18 07:10:30
【问题描述】:

我正在建造一家拍卖行。我正在使用 nodejs-mysql 包,我有这个 nodejs server.js-code 用于主页,显示多个拍卖

// loop
var pollingLoop = function() {
  // Doing the database query
var query = connection.query('SELECT a.`id`,a.`product_id`,a.`price`,a.`random`,a.`price_end`,TIMESTAMPDIFF(SECOND,NOW(),a.`date_end`) AS duration,p.`price_retail` FROM `auctions` AS a LEFT JOIN `products` AS p ON p.`id` = a.`product_id` WHERE TIMESTAMPDIFF(SECOND,NOW(),a.`date_end`) > "-1" ORDER BY `duration` DESC,`id` DESC'),
    auctions = []; 
  1. $_GET['id'] 可用于具有WHERE 条件的另一个SELECT 语句时,如何更改此查询?因为我想添加WHERE auction='$_GET['id']' 单次拍卖(但在服务器端)。
  2. 有没有办法让它更具可读性?因为当我按 ENTER 时,SELECT-statement 根本不起作用。这就是它在 nodejs-server-file server.js: http://i.stack.imgur.com/37fDl.jpg 上的样子

【问题讨论】:

    标签: javascript php mysql node.js


    【解决方案1】:

    有两种方法可以将 Javascript 字符串分成多行:反斜杠和字符串连接。

    用反斜杠分隔

    var text = "Lorem ipsum dolor sit amet,\
    consectetur adipisicing elit,\
    sed do eiusmod tempor incididunt\
    ut labore et dolore magna aliqua.";
    

    用字符串连接分隔

    var text = "Lorem ipsum dolor sit amet,"
             + "consectetur adipisicing elit,"
             + "sed do eiusmod tempor incididunt"
             + "ut labore et dolore magna aliqua.";
    

    您需要动态构建查询。像这样。

    var query = 'SELECT \
        a.`id`, \
        a.`product_id`, \
        a.`price`, \
        a.`random`, \
        a.`price_end`, \
        TIMESTAMPDIFF(SECOND, \
            NOW(), \
            a.`date_end`) AS duration, \
        p.`price_retail` \
    FROM \
        `auctions` AS a \
            LEFT JOIN \
        `products` AS p ON p.`id` = a.`product_id`';
    
    var where = '';
    if (condition) {
       where = 'WHERE \
        TIMESTAMPDIFF(SECOND, \
            NOW(), \
            a.`date_end`) > - 1';
    } else {
       where = "auction='$_GET['id']'";
    }
    
    var order = ' ORDER BY `duration` DESC , `id` DESC';
    query = query + where + order 
    var res = connection.query(query), auctions = []; 
    

    附言 这只是一个想法。例如,您可以使用var where = array() 并用条件填充它。然后,只需遍历数组并通过AND 创建查询连接条件。

    更新:

    如果不使用express模块,可以使用url模块查找GET参数。

    var query = require('url').parse(req.url,true).query;
    
    var id = query.id;
    var some_par = query.some_par;
    
    For url: /path/filename?id=123&some_par=456
    

    然后您可以使用id 变量构建查询。

    【讨论】:

    • 谢谢。现在我只想获取 id,但我的结果是“未定义”。使用该代码:var qry = require('url').parse(socket.handshake.url); var qry_id = qry.id;
    • 别忘了 TRUE - .parse(socket.handshake.url, true);你得到了什么 console.log(qry) ?
    • 是的,我已经添加了“true”。然后它说[object Object]。但是如果我输入 console.log(qry.path) 整个网址就会显示出来。但是我怎样才能得到一个特定的查询字符串,比如 id 呢?为什么他显示的是socket.io url而不是我的localhost的url?
    • localhost:3001/?id=456789 - var qry = require('url').parse(req.url, true).query; - 控制台.log(qry.id); - 这对我来说很好。
    • 我刚刚发现了这个问题。这是关于文件夹的。在server.js 中,它被定义为http.listen(1337)。但我没有在http://localhost:1337 上进行测试。我在http://localhost/customname/ 上进行测试。所以这就是为什么我没有得到一个ID。但是如何将其更改为自定义名称文件夹,例如 http://localhost/customname/?id=1234 也可以使用?
    猜你喜欢
    • 2014-09-25
    • 2014-10-05
    • 2020-07-21
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    相关资源
    最近更新 更多