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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |