根据用户偏好在表格内排序项目,正确的方法是什么?

时间:2009-06-23 09:02:27

标签: php mysql

在看到joomla使用箭头订购商品(文章,菜单条目等)之后,我想知道在表格中移动元素的最佳做法是什么。

你显然必须在表格中有一个字段,其中包含数字,字母或任何您可能想要用来定义订单的内容,然后您必须更改此顺序,我无法以任何优雅的方式来实现此目的你能救我吗?

非常感谢

编辑: 阅读答案我意识到我可能不太清楚,我不需要根据标准参数订购商品(比如我不知道,日期,身份等)。我需要自己决定订单。像这样:

id - name - order
1    one    2
2    two    1
3    three  3

我想知道更改项目顺序的正确方法(例如,如果我想让一个人进入第一个位置,我需要将2的订单值更改为'2',并将值1更改为'1'。

希望我能正确解释自己

5 个答案:

答案 0 :(得分:2)

使用大数字进行订购:

id - name - order
1    one    200000
2    two    100000
3    three  300000

当您需要在2和1之间移动3时,只需在100000和200000之间的中间更改其订单值:150000。

事实上,您需要在两个相邻数字之间插入元素。如果发生这种情况,则首先重写所有行的订单列,再次使用100000步骤。仔细选择你的步骤,你不会溢出你的类型,并且你不必经常重写整个表。

答案 1 :(得分:0)

如果您有小桌子,可以在客户端进行 使用jquery插件,

链接到演示: http://tablesorter.com/docs/

你需要的是为另一个表中的每个用户保存字段排序的首选项, 像年龄一样的名字....

之后只需要在js部分中进行操作,在

中设置此字段
$(document).ready(function()     {         $("#myTable").tablesorter( {sortList: [[0,0], [1,0]]} );     } );

在此解决方案中,您无需更改查询

答案 2 :(得分:0)

最简单的方法是在用于生成表的语句中使用“order by”子句,并使其在每个标题单元格中由链接符号控制,如Joomla中的箭头。

...所以当有人点击箭头(或你使用的任何东西)时,它是一个回到页面的超链接,只有一个“orderby”CGI变量,如“http://mydomain.com/mypage.php?orderby=salestotal”。

然后修改查询以使用该变量:

$sql = 'select col1, col2, col3 from table where col2 = somevalue';
if ($_REQUEST['orderby']) $sql .= " order by ' . $_REQUEST['orderby'];

如果它是一个字符串值,你需要摆弄引用等,如果表格首先是用CGI变量生成的,那么你也必须满足于管理这个状态。

使用Ajax或jquery或其他东西(如不同答案所建议的)处理页面内的表重建会更好(但更难!),以避免重新加载整个页面的状态。 / p>

答案 3 :(得分:0)

在你编辑的编辑中,我明白你在尝试什么。我已经使用和Order列以类似的方式实现了解决方案。然后使用ORDER BY子句中的Order列。

一个最佳实践提示是使用10,20,30等数字而不是1,2,3。这使我可以灵活地在一个新的Order值行之间插入10和20之间的值,如15,用于稍后出现的新内容。

答案 4 :(得分:0)

将数据保存为链接列表:

id parent name
-- ------ -----

1  2      one
2  0      two
3  1      three

并像这样查询:

SELECT  @r AS _parent,
        @r := (
        SELECT  id
        FROM    mytable
        WHERE   parent = _parent
        ) AS id
FROM    (
        SELECT  @r := 0
        ) vars,
        t_list

这将以正确的顺序返回列表:

id parent name
-- ------ -----

2  0      two
1  2      one
3  1      three

在这样的设计中移动一个项目甚至一个项目块最多只能更新三行。

在我的博客中查看此条目,了解在列表中移动项目的存储过程: