加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 更新列,使其包含行位置

发布时间:2020-12-13 16:28:40 所属栏目:PHP教程 来源:网络整理
导读:这是内容表: ContentID | CategoryID | Position | Other1 | Other2===================================================1 | 1 | NULL | abcd | efgh2 | 1 | NULL | abcd | efgh3 | 1 | NULL | abcd | efgh4 | 2 | NULL | abcd | efgh5 | 2 | NULL | abcd
这是内容表:
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

现在我想实现向上移动,向下移动,向上移动到底部功能的内容.我需要做的就是用数字填充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;

由Mchl添加:

你可以在这样的一个声明中做到这一点

update 
content,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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读