使用php上下移动mysql数据库行
我有一个mysql数据库和一些php,允许您在数据库中创建条目,更新条目,并将条目作为网页或xml查看。我想做的是添加一个函数,将数据库中的条目上移或下移一行,或者发送到数据库的顶部或底部 我在网上看到一些关于做这类事情的评论,建议在显示页面时进行动态排序,但我正在寻找一种持久的方法。我看到一种方法建议在数据库中有一个单独的“sort”字段,它与实际的数据库排序键无关,但我不确定为什么这比实际重新排序数据库要好 下面是表结构的转储:使用php上下移动mysql数据库行,php,mysql,Php,Mysql,我有一个mysql数据库和一些php,允许您在数据库中创建条目,更新条目,并将条目作为网页或xml查看。我想做的是添加一个函数,将数据库中的条目上移或下移一行,或者发送到数据库的顶部或底部 我在网上看到一些关于做这类事情的评论,建议在显示页面时进行动态排序,但我正在寻找一种持久的方法。我看到一种方法建议在数据库中有一个单独的“sort”字段,它与实际的数据库排序键无关,但我不确定为什么这比实际重新排序数据库要好 下面是表结构的转储: SET SQL_MODE="NO_AUTO_VALUE_ON_
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Database: `hlnManager`
--
-- --------------------------------------------------------
--
-- Table structure for table `hln_stations`
--
CREATE TABLE IF NOT EXISTS `hln_stations` (
`id` int(6) NOT NULL auto_increment,
`station_title` varchar(60) NOT NULL default '',
`station_display_name` varchar(60) NOT NULL default '',
`station_subtitle` varchar(60) NOT NULL default '',
`station_detailed_description` text NOT NULL,
`stream_url_or_playlist_url` text NOT NULL,
`link_type` varchar(25) NOT NULL default '',
`small_thumbnail_graphic_url` text NOT NULL,
`large_thumbnail_graphic_url` text NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;
数据库不是以任何顺序“存储”的。它们以存储子系统方便的任何方式存储。如果删除记录,新记录可能会使用旧记录的空间“插入”数据库。虽然看起来数据库总是以特定的顺序返回记录,但您不能依赖它
确保排序顺序的唯一方法是有一个字段进行排序。数据库不会以任何顺序“存储”。它们以存储子系统方便的任何方式存储。如果删除记录,新记录可能会使用旧记录的空间“插入”数据库。虽然看起来数据库总是以特定的顺序返回记录,但您不能依赖它
确保排序顺序的唯一方法是有一个字段进行排序。数据库“重新排序”需要两个记录交换主键,或者很可能需要交换主键以外的所有数据。这很可能是不需要的,因为主键应该是您可以一致地引用特定记录的一种方式
单独的订单字段将是一种方法。只需确保在“顺序”字段中添加索引,以保持快速运行。“重新排序”数据库需要两条记录交换主键,或者很可能需要交换主键以外的所有数据。这很可能是不需要的,因为主键应该是您可以一致地引用特定记录的一种方式
单独的订单字段将是一种方法。只需确保在“订单”字段中添加索引,以保持快速运行。不确定“重新排序”数据库是什么意思。。。SQL数据库通常不保证在缺少order BY子句的情况下返回记录的顺序(如果有)
id
s数组。在数据库端,循环它并相应地更新排序器,从1开始,然后从2开始,以此类推
编程难,使用难:实现经典的上移和下移按钮。单击后,将id
和操作
(例如,向上、向下)发送到服务器。有几种策略可以处理此更新,但我将概述几种策略:
假设用户单击了“上移”,则可以将ID与上一条记录交换
查找上一条记录:SELECT id FROM hln_stations WHERE SortOrder<(SELECT SortOrder FROM hln_stations WHERE id=…)ORDER BY SortOrder DESC LIMIT 1
运行两条update语句,交换排序器。反向移动。添加特殊代码以检测顶部或底部
等…
还有其他方法,但对于web界面,我建议您进行拖放操作,因为用户会喜欢它。不确定“重新排序”数据库是什么意思。。。SQL数据库通常不保证在缺少order BY子句的情况下返回记录的顺序(如果有)
id
s数组。在数据库端,循环它并相应地更新排序器,从1开始,然后从2开始,以此类推
编程难,使用难:实现经典的上移和下移按钮。单击后,将id
和操作
(例如,向上、向下)发送到服务器。有几种策略可以处理此更新,但我将概述几种策略:
假设用户单击了“上移”,则可以将ID与上一条记录交换
查找上一条记录:SELECT id FROM hln_stations WHERE SortOrder<(SELECT SortOrder FROM hln_stations WHERE id=…)ORDER BY SortOrder DESC LIMIT 1
运行两条update语句,交换排序器。反向移动。添加特殊代码以检测顶部或底部
等…
还有其他方法,但对于web界面,我建议您进行拖放操作,因为用户会喜欢它。无法确定数据库存储数据的顺序。当我们查询数据库时,我们指定希望数据按其排序的字段名。 在您的情况下,我将添加一个新列:
sequence
int(10)。并编写php函数来更改/更新序列号。当我使用选择查询时,我将按
$my_sorted = array(5,4,3,6,8,7,9,10,2,1);
update `mytable` set `sort_order` = (index of $my_sorted) WHERE `id`=(array value of that index).
$query = "UPDATE `mytable` SET sort_order= CASE id ";
foreach($my_sorted as $key=>$val){
$query .= " WHEN '$val' THEN $key ";
}
$query .="END";