如何使用Knex重新排序列?

时间:2019-07-09 20:18:46

标签: javascript sqlite electron

我正在使用Knex,electron和JavaScript从Sqlite3表中提取所有数据,并且希望对Knex查询或HTML / JavaScript端中的列进行重新排序。

我的sqlite3数据库具有以下标头数据:

id|Role|Password|Reference

使用以下代码,该表按以下顺序显示:

Password|Reference|Role|id

我试图在Knex中使用.orderBy方法,并且还试图在JavaScript中重新排序,但是我似乎无法对列进行重新排序。

电子方面,我有:

ipcMain.on('getUserTable:all', (event) => {
  let getUserTable = 
knex('User').select(['id','Role','Reference','Password']).orderBy('Role');
  getUserTable.then(function(tableData){
    newWin.webContents.send("userResultSent", tableData);
  });
});

在HTML方面,我有:

ipc.on('userResultSent', (event, tableData) => {
    var html = '<table>';
    html += '<tr>';
    for( var j in tableData[0] ) {
        html += '<th>' + j + '</th>';
        }
    html += '</tr>';
    for( var i = 0; i < tableData.length; i++) {
        html += '<tr>';
            for( var j in tableData[i] ) {
            html += '<td>' + tableData[i][j] + '</td>';
        }
    }
    html += '</table>';
    document.getElementById('db_output_container').innerHTML = html;
});

我希望能够查询数据库,以便数组按照表中的确切顺序显示。

2 个答案:

答案 0 :(得分:0)

在第二个for循环的结尾,您应该关闭tr标记。确实,您在第二个for循环之后立即打开了它,但没有关闭它。 我尚未测试过,但应该可以。

您的html文件应如下所示。

ipc.on('userResultSent', (event, tableData) => {
    var html = '<table>';
    html += '<tr>';
    for( var j in tableData[0] ) {
        html += '<th>' + j + '</th>';
        }
    html += '</tr>';
    for( var i = 0; i < tableData.length; i++) {
        html += '<tr>';
            for( var j in tableData[i] ) {
            html += '<td>' + tableData[i][j] + '</td>';
        }
        html += '</tr>'; /* i added this line here */
    }
    html += '</table>';
    document.getElementById('db_output_container').innerHTML = html;
});

答案 1 :(得分:0)

当前方法的问题是对象是无序的属性包。因此,对列的排序方式没有关系-无法保证属性的排序。

如果您需要特定的订单,则可以改用Array

由于您具有显示表格数据的通用代码,因此可以执行以下操作

ipcMain.on('getUserTable:all', (event) => {
  const columns = ['id','role','reference','password']

  let getUserTable = 
knex('User').select(columns).orderBy('role');
  getUserTable.then(function(tableData){
    newWin.webContents.send("userResultSent", {columns, tableData});
  });
});

创建html时

ipc.on('userResultSent', (event, {columns, tableData}) => {
    var html = '<table>';
    html += '<tr>';

    columns.forEach(column => {
        // if you want to capitalize names just do it here
        html += '<th>' + column + '</th>';
    })

    html += '</tr>';
    for( var i = 0; i < tableData.length; i++) {
        html += '<tr>';
        columns.forEach(column => {
          html += '<td>' + tableData[i][column] + '</td>';
        })

        html += '</tr>'; 
    }
    html += '</table>';
    document.getElementById('db_output_container').innerHTML = html;
  })