在NodeJS中使用BETWEEN子句

时间:2017-07-23 16:43:12

标签: javascript jquery mysql node.js socket.io

我想使用MySql数据库中的 BETWEEN 子句获取数据。

在客户端,我使用JQuery创建了2个内联日历,并使用socket.io发出了选定的日期值;

$('#fromDate').datepicker({
    inline: true,
    altField: '#d',
    dateFormat: "dd-mm-yy",
    altFormat: "yy-mm-dd",
    monthNames: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
    dayNamesMin: ["Pa", "Pt", "Sl", "Ça", "Pe", "Cu", "Ct"],
    firstDay: 1,
    numberOfMonths: 1,
    onSelect: function(dateText, inst) {
      var dateAsString = dateText; //the first parameter of this function
      var dateAsObject = $(this).datepicker('getDate'); //the getDate method
      console.log(dateAsString);
      socket.emit('socketfromDate', $('#d').val());
    }
  });

  $('#toDate').datepicker({
    inline: true,
    altField: '#x',
    dateFormat: "dd-mm-yy", 
    altFormat: "yy-mm-dd", 
    monthNames: ["Ocak", "Şubat", "Mart", "Nisan", "Mayıs", "Haziran", "Temmuz", "Ağustos", "Eylül", "Ekim", "Kasım", "Aralık"],
    dayNamesMin: ["Pa", "Pt", "Sl", "Ça", "Pe", "Cu", "Ct"],
    firstDay: 1,
    numberOfMonths: 1,
    onSelect: function(dateText, inst) {
      var dateAsString = dateText; //the first parameter of this function
      var dateAsObject = $(this).datepicker('getDate'); //the getDate method
      console.log(dateAsString);
      socket.emit('sockettoDate', $('#x').val());
    }
  });

在服务器端,如果我在“ fromDate ”值后收到“ toDate ”值,则MySql查询必须在这些天之间获取数据。

 var  fromDate_query,
      toDate_query;

io.on('connection', function(socket) {

      socket.on('socketfromDate', function(fromDate) {
        console.log();
        console.log("----------------------------------");
        console.log("Selected dateTime 'from': " + fromDate); //output: Selected dateTime 'from': 2017-07-01 
        console.log("----------------------------------");
        console.log();
        fromDate_query = fromDate;
      });

      socket.on('sockettoDate', function(toDate) {
        console.log();
        console.log("----------------------------------");
        console.log("Selected dateTime 'to': " + toDate); //output: Selected dateTime 'to': 2017-07-13
        console.log("----------------------------------");
        console.log();
        toDate_query = toDate;

        connection.query("SELECT * FROM report WHERE date BETWEEN ? AND  ?", [fromDate_query, toDate_query], function(err, rows) {
          if (err) console.log(err);
          else {
            for (var i = 0; i < rows.length; i++) {
              var row = rows[i];
              console.log("**********************************");
              console.log("Possible machine: " + row.machine); //output: nothing
              console.log("**********************************");
            }
          }
        });
      });
    });

问题是,没有任何反应。

两天之间查询的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您的代码中存在三个问题:

  1. 使用两个事件单独发送至&amp;从日期开始,您需要两个数据来处理SQL查询。

  2. 为什么在使用/时最好使用套接字的http请求来使用套接字。

  3. 查询应该在事件内完成,因为这是从客户端发出数据时的数据。

  4. 回答你的问题。您必须重构您的代码才能将两个单独的事件移除到一个事件中,这个事件将同时接收您到&amp;从这样的日期开始:

    select t.fieadA, 0 AS 'status'
    from table AS t
    

    除此之外,只有在选择了两个日期时,您才必须重构前端才能发出事件。

    编辑: 奖励积分 - &gt;收到查询数据后,请释放SQL连接