当前位置: 首页 > 面试题库 >

更新列,使其包含行位置

陶文林
2023-03-14
问题内容

这是content表:

ContentID | CategoryID | Position | Other1 | Other2
===================================================
1         | 1          | NULL     | abcd   | efgh
2         | 1          | NULL     | abcd   | efgh
3         | 1          | NULL     | abcd   | efgh
4         | 2          | NULL     | abcd   | efgh
5         | 2          | NULL     | abcd   | efgh
6         | 2          | NULL     | abcd   | efgh

这些是我将要运行的查询:

SELECT ContentID FROM content WHERE CategoryID = 1 ORDER BY Position
SELECT ContentID FROM content WHERE CategoryID = 2 ORDER BY Position

现在,我想实现上移,下移,上移和下移功能。我需要做的就是用数字填充“位置”列:

ContentID | CategoryID | Position
=================================
1         | 1          | 1
2         | 1          | 2
3         | 1          | 3
4         | 2          | 1
5         | 2          | 2
6         | 2          | 3

是否可以通过MySQL中的单个查询来实现?就像是:

UPDATE content
SET Position = <ROW_NUMBER>
WHERE CategoryID = 1
ORDER BY Position

UPDATE content
SET Position = <ROW_NUMBER>
WHERE CategoryID = 2
ORDER BY Position

问题答案:

这应该工作

update 
content,
(
  select 
  @row_number:=ifnull(@row_number, 0)+1 as new_position,
  ContentID 
  from content
  where CategoryID=1
  order by position
) as table_position
set position=table_position.new_position
where table_position.ContentID=content.ContentID;

但我更喜欢先应用此方法,以取消设置用户定义的变量

set @row_number:=0;

您可以在这样的一条语句中做到这一点

update 
content,
(
  select 
  @row_number:=ifnull(@row_number, 0)+1 as new_position,
  ContentID 
  from content
  where CategoryID=1
  order by position
) as table_position,
(
  select @row_number:=0
) as rowNumberInit
set position=table_position.new_position
where table_position.ContentID=content.ContentID;


 类似资料:
  • 我有这样一个df: 其中ID是另一个df的主键和唯一键,该df是此df的源。集群不是密钥,不同的ID通常具有相同的集群值;不管怎么说,这是我必须掌握的信息。 我想获得的是这个数据框: 如果这是不可能的,像这样的字典也可以: 我试过很多方法都没有成功。。似乎无法将列表作为数据帧值插入。。无论如何,我认为以某种巧妙的方式进球应该不会那么困难。。对不起,如果我想不起来了,但我对编码是新手 有什么建议吗?

  • 问题内容: 如何过滤包含另一列的行?例如,如果我们有两列A,B的DT,是否可以使用B.contains(A)过滤行?不仅B是否包含来自DT的所有A中的一些A值,而且还只是一行。 问题答案: 您可以使用由和(如果需要)过滤器列和每行创建的掩码: 解决方案的差异 -输入已更改:

  • 我刚开始学习Laravel,我发现以下错误: 在gebruikers中插入未知列“更新位置”(naam、wachtwoord、更新位置、创建位置) 我知道错误来自迁移表时的timestamp列,但我没有使用字段。我以前在学习Laravel教程时使用它,但现在我正在制作(或试图制作)我自己的东西。即使不使用时间戳,也会出现此错误。我似乎找不到使用它的地方。代码如下: 控制器 路线 模型 我一定忘了什

  • 我正在尝试删除此df中的所有行,其中“DB Serial”列包含字符*: 我正在使用: 但我得到这个错误:

  • 在下面的代码中,我绑定记录形成一个视图模型,它使用的是一个可观察的代码,我还提高了intifyProperties tychange,现在我有一个按钮设置,它使用navigation.pushasync的方法去一个新的页面,在那里我更新数据库记录,我已经在这个新页面中创建了一个列表视图,并使用这里显示的相同的绑定来绑定记录,每当我添加它更新的东西,但如果我按后退按钮,回到这个EntryTabPag

  • 问题内容: 我有一个拥有Google广告的广告。我的网站主要是AJAX,不需要刷新浏览器。这意味着我的广告也不会刷新,这也不理想,因为用户整天盯着一个广告。 因此,我想要一种刷新页面上特定内容的方法。我找到了很多解决方案,但是它们没有用。例如,使用JQuery的html函数: 这设法刷新整个页面,不知道如何。我也可以向包含Google广告的HTML页面发出AJAX请求,但我想它的作用与上述尝试相同