我有这段 PHP 代码可以列出表格中的行:
$sql="SELECT * from pages order by menu_order ASC ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
while($result=mysql_fetch_array($rs))
{
echo '<a href="edit_page.php?pagename='.$result["pagename"].'">'.$result["title"].'</a> - <a href="edit_page.php?do=up&page_order='.$result["menu_order"].'&seq='.$result["sequence"].'">Move Up</a> | <a href="edit_page.php?do=down&page_order='.$result["menu_order"].'&seq='.$result["sequence"].'">Move Down</a><br><br>';
}
他们有上下链接来改变顺序
使用此代码:
$page_order = $_GET['page_order'];
if ($_GET['do'] == 'up')
{
$sql="UPDATE pages SET menu_order = '$page_order' +1 WHERE sequence != '".$_GET["seq"]."' AND menu_order < '$page_order' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$sql="UPDATE pages SET menu_order = menu_order -1 WHERE sequence = '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
}
elseif($_GET['do'] == 'down')
{
$sql="UPDATE pages SET menu_order = '$page_order' -1 WHERE sequence != '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
$sql="UPDATE pages SET menu_order = menu_order +1 WHERE sequence = '".$_GET["seq"]."' ";
$rs=mysql_query($sql,$conn) or die(mysql_error());
}
但它不起作用 - 它随机更改数字,例如将它们全部更改为 0 或负号
正确执行此操作的最佳方法是什么?
编辑:新代码...
我已经尝试过这段代码,但效果不佳 - 如果我将底部行向上移动到顶部,它每次都会更改数字 -1 但最终会出现重复的订单号?
$current = $_GET["menu_order"];
$prev = $current-1;
$next = $current;
if($_GET['do'] == 'up')
{
$sql2="UPDATE pages SET menu_order = '".($prev)."' WHERE sequence = '".$_GET["seq"]."' ";
echo $sql2.'<br>';
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
$sql2="UPDATE pages SET menu_order = '".($next)."' WHERE sequence = '".($_GET["seq"]-1)."' ";
echo $sql2;
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
}
elseif($_GET['do'] == 'down')
{
$sql2="UPDATE pages SET menu_order = '".($next)."' WHERE sequence = '".$_GET["seq"]."' ";
echo $sql2.'<br>';
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
$sql2="UPDATE pages SET menu_order = '".($prev)."' WHERE sequence = '".($_GET["seq"]+1)."' ";
echo $sql2;
$rs2=mysql_query($sql2,$conn) or die(mysql_error());
}
最佳答案
我在我的一个应用程序中有一个类似的设置,我有一个站点上的页面列表,用户可以单击向上/向下箭头来重新排序页面。当他们点击向上/向下箭头时,它会发送他们点击的 page_id,然后是“向上”或“向下”。
我使用的是 PDO,因此我的格式看起来与您的略有不同。此外,我网站上的页面可以分层(即下拉导航),因此它们也有父 ID。当我更改它们的顺序时,我希望它们更改父级子项内的顺序,而不是整个页面集内的顺序。如果您要订购的东西是平的,您可以删除其中的一些。
第一步是获取我们要移动的页面的parent_id:
$parent_query = "SELECT parent_id FROM page WHERE page_id = :page_id";
$parent_result = $db_mysql->prepare( $parent_query );
$parent_result->execute( array(
":page_id" => $_GET['page_id']
));
$parent_row = $parent_result->fetch( PDO::FETCH_ASSOC );
接下来我们获取当前页面的显示顺序:
$page_query = "SELECT disp_order FROM page WHERE page_id = :page_id AND parent_id = :parent_id";
$page_result = $db_mysql->prepare( $page_query );
$page_result->execute( array(
":page_id" => $_GET['page_id'],
":parent_id" => $parent_row['parent_id']
));
$page_row = $page_result->fetch( PDO::FETCH_ASSOC);
现在我们要获取要交换的页面的显示顺序。如果我们点击向下移动,那么我们会得到下一页的page_id和disp_order。如果我们点击向上移动,那么我们会得到上一页的page_id和disp_order:
$swappage_query = "SELECT page_id, disp_order FROM page WHERE disp_order = :disp_order AND parent_id = :parent_id";
$swappage_result = $db_mysql->prepare( $swappage_query );
if( $_GET['move'] == "up" ) {
$swappage_result->execute( array(
":disp_order" => $page_row['disp_order'] - 1,
":parent_id" => $parent_row['parent_id']
));
} else {
$swappage_result->execute( array(
":disp_order" => $page_row['disp_order'] + 1,
":parent_id" => $parent_row['parent_id']
));
}
$swappage_row = $swappage_result->fetch( PDO::FETCH_ASSOC );
最后,我们将通过更改我们单击的页面和我们要交换的旁边页面的显示顺序来执行交换:
$neworder_query = "UPDATE page SET disp_order = :disp_order WHERE page_id = :page_id";
$neworder_result = $db_mysql->prepare( $neworder_query );
$neworder_result->execute( array(
":disp_order" => $swappage_row['disp_order'],
":page_id" => $_GET['page_id']
));
$neworder_result->execute( array(
":disp_order" => $page_row['disp_order'],
":page_id" => $swappage_row['page_id']
));
我在这里做的是:
关于php - 更改 MySQL 表中行的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17910545/
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我尝试使用不同的ssh_options在同一阶段运行capistranov.3任务。我的production.rb说:set:stage,:productionset:user,'deploy'set:ssh_options,{user:'deploy'}通过此配置,capistrano与用户deploy连接,这对于其余的任务是正确的。但是我需要将它连接到服务器中配置良好的an_other_user以完成一项特定任务。然后我的食谱说:...taskswithoriginaluser...task:my_task_with_an_other_userdoset:user,'an_othe
假设我有一个FireNinja我的数据库中的对象,使用单表继承存储。后来才知道他真的是WaterNinja.将他更改为不同的子类的最干净的方法是什么?更好的是,我很想创建一个新的WaterNinja对象并替换旧的FireNinja在数据库中,保留ID。编辑我知道如何创建新的WaterNinja来self现有FireNinja的对象,我也知道我可以删除旧的并保存新的。我想做的是改变现有项目的类别。我是通过创建一个新对象并执行一些ActiveRecord魔法来替换行,还是通过对对象本身做一些疯狂的事情,或者甚至通过删除它并使用相同的ID重新插入来做到这一点,这是问题的一部分。
文章目录一、概述简介原理模块二、配置Mysql使用版本环境要求1.操作系统2.mysql要求三、配置canal-server离线下载在线下载上传解压修改配置单机配置集群配置分库分表配置1.修改全局配置2.实例配置垂直分库水平分库3.修改group-instance.xml4.启动监听四、配置canal-adapter1修改启动配置2配置映射文件3启动ES数据同步查询所有订阅同步数据同步开关启动4.验证五、配置canal-admin一、概述简介canal是Alibaba旗下的一款开源项目,Java开发。基于数据库增量日志解析,提供增量数据订阅&消费。Git地址:https://github.co
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
RSpec似乎按顺序匹配方法接收的消息。我不确定如何使以下代码工作:allow(a).toreceive(:f)expect(a).toreceive(:f).with(2)a.f(1)a.f(2)a.f(3)我问的原因是a.f的一些调用是由我的代码的上层控制的,所以我不能对这些方法调用添加期望。 最佳答案 RSpecspy是测试这种情况的一种方式。要监视一个方法,用allowstub,除了方法名称之外没有任何约束,调用该方法,然后expect确切的方法调用。例如:allow(a).toreceive(:f)a.f(2)a.f(1)
我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功
我想在IRB中浏览文件系统并让提示更改以反射(reflect)当前工作目录,但我不知道如何在每个命令后进行提示更新。最终,我想在日常工作中更多地使用IRB,让bash溜走。我在我的.irbrc中试过这个:require'fileutils'includeFileUtilsIRB.conf[:PROMPT][:CUSTOM]={:PROMPT_N=>"\e[1m:\e[m",:PROMPT_I=>"\e[1m#{pwd}>\e[m",:PROMPT_S=>"FOO",:PROMPT_C=>"\e[1m#{pwd}>\e[m",:RETURN=>""}IRB.conf[:PROMPT_MO