Mysql更新和排序列表
初始表格“我的产品”Mysql更新和排序列表,mysql,Mysql,初始表格“我的产品” pr_id sort_pr group_pr 321 -1 2 422 -2 2 621 -3 2 921 -4 2 753 -5 2 713 -6 2 573 -7 2 570 -8 2 521 -9 2 901
pr_id sort_pr group_pr
321 -1 2
422 -2 2
621 -3 2
921 -4 2
753 -5 2
713 -6 2
573 -7 2
570 -8 2
521 -9 2
901 -1 3
例如,用户在网站上工作以从列表中删除某些产品时
pr_id sort_pr group_pr
321 -1 2
753 -5 2
573 -7 2
521 -9 2
901 -1 3
我想对“sort_pr”列进行排序并得到结果,如下所示:
pr_id sort_pr group_pr
321 -1 2
753 -2 2
573 -3 2
521 -4 2
901 -1 3
这是我的要求:
UPDATE `my_product` SET time_column=sort_pr, sort_pr='-1' WHERE group_pr='2'
UPDATE `my_product` SET sort_pr=(SELECT MIN(sort_pr))-1, time_column='0' WHERE group_pr='2' ORDER BY time_column DESC
但它不起作用
是否可以在一次更新中对列表进行排序并保存顺序?我已经为您编写了查询。我希望它能解决您的问题:
SELECT
pr_id, cnt
FROM
(SELECT
pr_id,
@prevgrouppr,
CASE
WHEN group_pr != @prevgrouppr THEN @rownum:=- 1
ELSE @rownum:=@rownum - 1
END AS cnt,
@prevgrouppr:=group_pr
FROM
my_product
CROSS JOIN (SELECT @rownum:=0, @prevgrouppr:=0) r) AS t
用于更新
UPDATE my_product
LEFT JOIN
(SELECT
pr_id,
@prevgrouppr,
CASE
WHEN group_pr != @prevgrouppr THEN @rownum:=-1 ELSE @rownum:=@rownum - 1
END AS cnt,
@prevgrouppr:=group_pr
FROM
my_product
CROSS JOIN (SELECT @rownum:=0, @prevgrouppr:=0) r) AS t ON t.pr_id = my_product.pr_id
SET
my_product.sort_pr = t.cnt
;
检查我已经为您写下了查询。我希望它能解决您的问题:
SELECT
pr_id, cnt
FROM
(SELECT
pr_id,
@prevgrouppr,
CASE
WHEN group_pr != @prevgrouppr THEN @rownum:=- 1
ELSE @rownum:=@rownum - 1
END AS cnt,
@prevgrouppr:=group_pr
FROM
my_product
CROSS JOIN (SELECT @rownum:=0, @prevgrouppr:=0) r) AS t
用于更新
UPDATE my_product
LEFT JOIN
(SELECT
pr_id,
@prevgrouppr,
CASE
WHEN group_pr != @prevgrouppr THEN @rownum:=-1 ELSE @rownum:=@rownum - 1
END AS cnt,
@prevgrouppr:=group_pr
FROM
my_product
CROSS JOIN (SELECT @rownum:=0, @prevgrouppr:=0) r) AS t ON t.pr_id = my_product.pr_id
SET
my_product.sort_pr = t.cnt
;
检查为什么要对其进行排序?相反,当您在某处实际显示它时,只需通过执行
SELECT
语句对其进行排序即可。这会更容易。迪彭·沙阿,问题是“sort_pr”在本地数据库中是键,或者不是键,你仍然可以对它进行排序。你为什么要对它进行排序?相反,当您在某处实际显示它时,只需通过执行SELECT
语句对其进行排序即可。这会更容易。迪彭·沙阿,问题是“sort_pr”在本地数据库中是键,或者不是键,你们仍然可以对它进行排序。