Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php上下移动mysql数据库行_Php_Mysql - Fatal编程技术网

使用php上下移动mysql数据库行

使用php上下移动mysql数据库行,php,mysql,Php,Mysql,我有一个mysql数据库和一些php,允许您在数据库中创建条目,更新条目,并将条目作为网页或xml查看。我想做的是添加一个函数,将数据库中的条目上移或下移一行,或者发送到数据库的顶部或底部 我在网上看到一些关于做这类事情的评论,建议在显示页面时进行动态排序,但我正在寻找一种持久的方法。我看到一种方法建议在数据库中有一个单独的“sort”字段,它与实际的数据库排序键无关,但我不确定为什么这比实际重新排序数据库要好 下面是表结构的转储: SET SQL_MODE="NO_AUTO_VALUE_ON_

我有一个mysql数据库和一些php,允许您在数据库中创建条目,更新条目,并将条目作为网页或xml查看。我想做的是添加一个函数,将数据库中的条目上移或下移一行,或者发送到数据库的顶部或底部

我在网上看到一些关于做这类事情的评论,建议在显示页面时进行动态排序,但我正在寻找一种持久的方法。我看到一种方法建议在数据库中有一个单独的“sort”字段,它与实际的数据库排序键无关,但我不确定为什么这比实际重新排序数据库要好

下面是表结构的转储:

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子句的情况下返回记录的顺序(如果有)

  • 您需要一个“SortOrder”类型的列。我建议您使用唯一键将其设置为int
  • 您需要一种通过UI更新此“SortOrder”列的方法
  • 易于编程,易于使用:使用jQuery或任何适合您的javascript库在HTML中实现一个简单的拖放界面。在on complete方法(或响应save按钮)中,触发一个ajax调用,该调用将以正确的顺序发送一个
    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子句的情况下返回记录的顺序(如果有)

  • 您需要一个“SortOrder”类型的列。我建议您使用唯一键将其设置为int
  • 您需要一种通过UI更新此“SortOrder”列的方法
  • 易于编程,易于使用:使用jQuery或任何适合您的javascript库在HTML中实现一个简单的拖放界面。在on complete方法(或响应save按钮)中,触发一个ajax调用,该调用将以正确的顺序发送一个
    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";