我正在使用doctrine在zf2中开发一个项目,我需要创建一种方法来对order字段进行重新编号, order值是连续的。 之前:

+-----+-------+--------+------------+
|  id | order | item   | collection |
+-----+-------+--------+------------+
| 987 |     1 | apple  | fruits     |
|  46 |     2 | banana | fruits     |
| 394 |     7 | grape  | fruits     |
| 265 |    30 | pear   | fruits     |
|  89 |     1 | squash | vegetables |
+-----+-------+--------+------------+

后:

+-----+-------+--------+------------+
|  id | order | item   | collection |
+-----+-------+--------+------------+
| 987 |     1 | apple  | fruits     |
|  46 |     2 | banana | fruits     |
| 394 |     3 | grape  | fruits     |
| 265 |     4 | pear   | fruits     |
|  89 |     1 | squash | vegetables |
+-----+-------+--------+------------+

顺序是按collection排序的,但是我不需要重新编号整个数据集的方法。 只是特定集合中的记录。

我正在考虑的一些解决方案包括:

临时表:

  1. 按顺序将相关记录转储到新表中,
  2. 添加一个名为new_order的字段,该字段是一个自动编号字段,
  3. 将表连接到id字段并更新current_table.order = new_table.new_order
  4. 删除临时表。

循环浏览记录并一次更新一个:

$collection = … // results from select query where collection=fruits

n  = 1;
For each ($collection as $item) {
// update query to set order=n where id=$item[id]
n += 1
}

还有其他想法吗?

#1楼 票数:0

非常非常肯定,请使用第二种方法。IE遍历记录和更新。

不使用临时表的快速原因:

  • 如果您使用的是MySQL临时表,则该表对当前会话可见; 如果您使用持久连接,则实际上可以由多个会话共享。 如果您同时运行两次脚本,则可能导致某些数据损坏。 同样的事情适用于创建真实表。

您应该做的是:

  1. 检索所有数据,或至少按逻辑批次检索它们(在这种情况下,可以通过仅检索特定“集合”的行(例如水果)来完成)
  2. 对行进行排序(以前也可以在SQL查询中完成)
  3. 完全按照您的建议使用计数器更新行

  ask by jcropp translate from so

未解决问题?本站智能推荐:

1回复

在学说中多对多的实体(symfony2)

我的数据库(MySQL)中有一个表,该表将一些酒店与类别相关联。 这是一个部分表,它链接酒店和类别表,因为酒店可以属于许多类别,反之亦然。 在同一张表中,我有一个带有附加信息的字段( 维度为1的整数 )。 当使用Symfony控制台生成实体时,酒店类和类别包含创建另一个实体的对象数组。
3回复

在学说中使用LIMIT的子查询[重复]

这个问题在这里已有答案: 主义2限制IN子查询 1回答 我正在尝试使用Doctrine进行子查询的查询。 现在它给了我一个错误。 我在存储库中的功能是: 这给了我这个错误: 我几乎放弃了Doctrine,我无法弄清楚如何使用子查询或带有子查询的联
3回复

如何处理学说中的僵局?

我有一个基于Symfony的移动应用程序和服务器,该服务器为该移动应用程序提供了API。 我有一种情况,用户可以喜欢Post 。 当用户喜欢Post我会在ManyToMany表中添加一个该特定用户喜欢此Post的条目(步骤1)。 然后在Post表中增加likesCounter(步骤2)
2回复

如何在学说中写联合查询?

我想在学说中使用联合,我搜索了很多但没有成功,这是我在sql中的联合查询,如何在学说中转换此查询? 这是我的学问 我做了很多研究,但没有任何成功,如果有人能帮助的话,我要先感谢一百万。
1回复

如何在学说中插入非常的参考

我有3个实体: User , Page , Post 在Post实体中: 在Page : 当帖子的发布我想这是成员的所有用户的Page被设置为subsribers Post $post->setSubscribers($post->getPage()->
1回复

违反完整性约束-如何在具有类表继承的学说中创建实体

我在教义中创建继承对象时遇到问题...我现在是第一次使用教义... 一些细节:sql数据库: SQL DescribableVersionedEntity是父类(继承类型为Joined),每个Entity继承该父类。 (所以我必须使用类继承,是吗?) 实体: 实体来说
2回复

如何从学说中的联接表中检索结果

我正在使用当前symfony发行版中随附的学说在两个表之间进行联接。 这是我的控制器代码: 由此生成的查询是正确的,并且如果我在phpmyadmin中执行查询,则可以提供预期的字段。 但是,我不知道如何访问返回结果集中的那些字段。 我期望它的工作方式(通过访问联接表实体的ge
1回复

学说中的两个生成价值观

我想在我的Doctrine-Entity中实现一个人类可读的ID。 我想保持DB-ID工作并添加类似“PRE12-00005”(带有前缀和年份,并且每年新的0开始)。 我尝试添加一个Custom-ID-Generator,但似乎Doctrine无法在一个实体中使用两个生成的值。 Do