基于int的自定义字段排序

如果我有一个数据库字段列表:</ p>

  id 订单标题
1 3这是一篇文章
2 1这是另一篇文章
3 2这也是一篇文章
4 4这仍然是一篇文章
</ code> </ pre>

我希望根据 order </ em>更改这些顺序。

如果我在id#1到2上设置顺序,我希望将id#3上的顺序设置为3.

If 我将id#4上的顺序设置为1我希望id#1上的顺序为4,id#2上的顺序为2,id#3上的顺序为3等等。</ p>

< p>我该怎么做? 我认为它应该很简单,但我无法弄明白。

我已搜索但我不知道该搜索什么... </ p>
</ div>

展开原文

原文

If I have a list of database fields:

id    order    title
1     3        This is a post
2     1        This is another post
3     2        This is also a post
4     4        This is still a post

And I want change the order of these based on order.
If I set order on id #1 to 2 I want order on id #3 to be set to 3.
If I set order on id #4 to 1 I want order on id #1 to be 4, order on id #2 to be 2, order on id #3 to be 3 etc. etc.

How can I do this? I think it should be quite simple but I can't figure it out.
I have searched but I don't know what to search for...

doukuilian8365
doukuilian8365 :没有萌芽,你的答案是错误的。我发现了这个模式
大约 8 年之前 回复
duanliaoyu8419
duanliaoyu8419 是。请参阅下面的答案。
大约 8 年之前 回复
dongwu3596
dongwu3596 :你能在问题中找到一个模式吗?
大约 8 年之前 回复
doutou7740
doutou7740 如果只有我可以downvote评论。
大约 8 年之前 回复
dpyln64620
dpyln64620 您尝试实现的过程是不可能的,因为根据您的问题没有指定模式。如果它是一个简单的交换它可以完成,但这不能通过使用简单的PHP完成,这需要与人工智能的高度理解
大约 8 年之前 回复
dton37910
dton37910 对,抱歉。我换了订单。
大约 8 年之前 回复
dounouxi1020
dounouxi1020 无法理解这个问题!!!!!这是指你的身份或订单
大约 8 年之前 回复

3个回答



您可以使用两个 UPDATE </ code>语句在SQL中执行此操作:</ p>

  START TRANSACTION; 
SELECT order FROM t WHERE order BETWEEN $ new_order AND $ old_order FOR UPDATE;

UPDATE t SET order = order + 1 WHERE order BETWEEN $ new_order AND $ old_order;
UPDATE t SET order = $ new_order WHERE id = $ id;

COMMIT;
</ code> </ pre>

我在这些更新期间锁定了表以防止并发问题(但请注意,事务/锁是 仅适用于InnoDB表。)</ p>
</ div>

展开原文

原文

You can do it in SQL with two UPDATE statements:

START TRANSACTION;
SELECT order FROM t WHERE order BETWEEN $new_order AND $old_order FOR UPDATE;

UPDATE t SET order = order + 1  WHERE order BETWEEN $new_order AND $old_order;
UPDATE t SET order = $new_order WHERE id = $id;

COMMIT;

I have locked the table during these updates to prevent concurrency issues (however, note that transactions/locks are only applicable to InnoDB tables).

douwa0280
douwa0280 我在更新的答案中显示了一个锁(使用SELECT ... FOR UPDATE)。 请注意,只能锁定InnoDB表。
大约 8 年之前 回复
dongluan1743
dongluan1743 像这样? LOCK TABLES张贴WRITE
大约 8 年之前 回复



首先,您必须找到 $ other_row </ code>,即具有 order </ code的 >您想重用的价值。 然后更改每一行的值。</ p>

  $ id_to_set = 1; 
$ order_to_set = 2;

//找到需要交换的订单
$ result = mysql_query(“从xxx中选择顺序,其中id = $ id_to_set”);
$ row = mysql_fetch_row($ result);
//找到将要修改的另一行
$ result = mysql_query(“select id 来自xxx,其中order = $ order_to_set“);
$ other_row = mysql_fetch_row($ result);

//实际交换
mysql_query(”更新xxxx设置顺序= $ order_to_set,其中id = $ id_to_set“);

mysql_query(“update xxxx set order =”。$ row ['order']。“where id =”。$ other_row ['id']);
</ code> </ pre>
</ div>

展开原文

原文

First you have to find the $other_row, the one that has the order value you want to reuse. Then change each row’s value.

$id_to_set = 1;
$order_to_set = 2;

// Find the order that will need to be swapped
$result = mysql_query("select order from xxx where id = $id_to_set");
$row = mysql_fetch_row($result);
// Find the other row that will be modified
$result = mysql_query("select id from xxx where order = $order_to_set");
$other_row = mysql_fetch_row($result);

// Do the actual swapping
mysql_query("update xxxx set order = $order_to_set where id = $id_to_set");
mysql_query("update xxxx set order = " . $row['order'] . " where id = " . $other_row['id']);



有两种方法:
read SQL doc并在查询中使用ORDER BY close </ p>

阅读PHP文档并使用usort函数</ p>
</ div>

展开原文

原文

there are two ways : read SQL doc and use the ORDER BY close in your query

read PHP doc and use usort function

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问