如何将订单保存到数据库表中?

问题描述 投票:0回答:2

也许很奇怪,但我找不到关于我的问题的(好)帖子..

我有一些菜单项,我想让用户以自定义顺序将它们保存在数据库表中。我使用 jquery UI 让他们按良好的顺序放置项目(在 tbody 元素上可排序)。我现在的情况真的很简单,但将来会更复杂(子菜单,特殊页面,...)..

<table>
    <thead>
        <tr>
            <th>#</th>
            <th>Item</th>
            <th>ID</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>1</td>
            <td>Title</td>
            <td>2</td>
        </tr>
        <tr>
            <td>2</td>
            <td>Title</td>
            <td>4</td>
        </tr>
        <tr>
            <td>3</td>
            <td>Title</td>
            <td>6</td>
        </tr>
</table>

我的问题: 我可以将项目的顺序保存在数据库表中。这种可能性有哪些缺点?

我想将其保存在带有页面(id)和权重的数据库表中。 越高越不重要(数据库表要微调)..

CREATE TABLE `pageweight` (
  `id` int(11) NOT NULL,
  `page` int(11) NOT NULL,
  `weight` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我看到的可能性:

我可以通过选择表格主体中的表格行将其保存在 jQuery 中。对于每个表行,我都有一个 Ajaxrequest.. 更新/在数据库中创建一行..

我可以使用表单中的隐藏字段。 id/name-attribute可以包含menitemid,值为权重。 jQuery每次有变化就可以更新吗?然后在 PHP 中我处理每个字段并让它保存..

或者还有其他方法吗?尤其是当它变大的时候..

php mysql jquery-ui
2个回答
1
投票

最基本的方法是迭代每一行并将每个单元格组合成一个对象,保存到数组中。

function getTableData(tObj){
  var keys = [];
  $("thead tr th").each(function(i, el){
    keys.push($(el).text().trim());
  });
  var rows = [];
  $("tbody tr", tObj).each(function(i, el){
    var r = {};
    $.each(keys, function(k, v){
      if(v == "#"){
        r["id"] = parseInt($("td", el).eq(k).text().trim());
      } else {
        r[v] = $("td", el).eq(k).text().trim();
      }
    });
    rows.push(r);
  });
}

var pageWeights = getTableData($("table"));

此函数将读取标题行和创建的键。假设它们是

id
page
weight
或任何其他值,它将收集它们。然后它将捕获每个正文行的关联数据。如果您执行
console.log(pageWeights)
,您会看到类似以下内容:

[{
  id: 1,
  page: "Title",
  weight: "2"
},{
  id: 2,
  page: "Title",
  weight: "4"
},{
  id: 3,
  page: "Title",
  weight: "6"
}];

然后您可以将其发布到服务器端脚本:

$.post("savetable.php", {
  data: JSON.stringify(pageWeights)
}, function(result){
  console.log(result);
});

如果您的表比较复杂,这可能不是最好的解决方案。例如,如果表包含 100 或 1000 行,这可能会创建大量无法通过 POST 传递的数据,或者可能导致浏览器性能不佳。考虑改变功能:

  • 收集特定数量的行
  • 仅查找更改的数据并仅发送这些更新
  • 减少表格中呈现的数据量

您可能还想查看使用 DataTables 库。这对您可能想做的很多事情都有帮助。


-2
投票

我认为将每个设置保存到表中的每个记录并不理想。您的表格将比您的实际内容大。因此,您在表设计上浪费了空间和查询时间。 我建议将“用户设置”保存在一条记录中,例如表中的 JSON 或 TEXT 格式的记录。加载时间更短。

© www.soinside.com 2019 - 2024. All rights reserved.