php 如何在数据库表中保存订单?

zsohkypk  于 9个月前  发布在  PHP
关注(0)|答案(2)|浏览(94)

也许斯特朗,但我找不到一个(好)后,所以我的问题..
我有一些menuitems,我想让用户保存他们在一个DB表中的自定义顺序。我使用jquery UI,让他们把项目在良好的秩序(与tbody元素上的sortable)。我的情况现在真的很简单,但它会在未来更复杂(搜索,特殊页面,.

<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中,通过选择表体中的tablerows。对于每个表行,我有一个Ajaxrequest..,它更新/创建数据库中的一行。
我可以在我的表单中使用隐藏字段。id/name-attribute可以包含menuitemid,值是权重。jQuery可以在每次更改时更新它吗?然后在PHP中我处理每个字段并让它保存。
或者有其他的方法?特别是当它变得更大的时候..

odopli94

odopli941#

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

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"));

字符串
此函数将读取标题行和创建的键。假设它们是idpageweight或任何其他值,它将收集它们。然后它将捕获每个主体行的相关数据。如果执行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库。这对你想做的很多事情都有帮助。

shyt4zoc

shyt4zoc2#

我不认为将每个设置保存到表中的每个记录是理想的。您的表将比您的真实的内容庞大。因此,您在表设计上浪费了空间和查询时间。我建议将“用户设置”保存在一个单独的记录中,就像表中的JSON或TEXT格式的记录一样。加载时间更少。

相关问题