在看到joomla使用箭头订购商品(文章,菜单条目等)之后,我想知道在表格中移动元素的最佳做法是什么。
你显然必须在表格中有一个字段,其中包含数字,字母或任何您可能想要用来定义订单的内容,然后您必须更改此顺序,我无法以任何优雅的方式来实现此目的你能救我吗?
非常感谢
编辑: 阅读答案我意识到我可能不太清楚,我不需要根据标准参数订购商品(比如我不知道,日期,身份等)。我需要自己决定订单。像这样:
id - name - order
1 one 2
2 two 1
3 three 3
我想知道更改项目顺序的正确方法(例如,如果我想让一个人进入第一个位置,我需要将2的订单值更改为'2',并将值1更改为'1'。
希望我能正确解释自己
答案 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
在这样的设计中移动一个项目甚至一个项目块最多只能更新三行。
在我的博客中查看此条目,了解在列表中移动项目的存储过程: