Php mysql选择distinct并丢弃其他
我有这个表,我想在mysql表中将所有第一项标记为OK,将所有其他项标记为rejected,并将其状态更改为Not OK 我们能用PHP对每个产品进行一次查询吗 这是表格结构Php mysql选择distinct并丢弃其他,php,mysql,Php,Mysql,我有这个表,我想在mysql表中将所有第一项标记为OK,将所有其他项标记为rejected,并将其状态更改为Not OK 我们能用PHP对每个产品进行一次查询吗 这是表格结构 id prod_id position status 3056620 4610395144282 20 0 3056619 4610395144282 7 0 3020612 4610395144282 19 0 3020611 4610395144282 7 0 30206
id prod_id position status
3056620 4610395144282 20 0
3056619 4610395144282 7 0
3020612 4610395144282 19 0
3020611 4610395144282 7 0
3020610 4610395144282 6 0
2996086 4610395144282 17 0
2996085 4610395144282 6 0
2996055 4610395144282 17 0
2996054 4610395144282 6 0
2994301 4610395144282 29 0
2994300 4610395144282 16 0
2994299 4610395144282 6 0
2994279 4610395144282 26 0
2994278 4610395144282 19 0
2994277 4610395144282 15 0
2994276 4610395144282 11 0
2994275 4610395144282 6 0
2989321 4610395144282 24 0
2989320 4610395144282 22 0
2989319 4610395144282 19 0
2989318 4610395144282 17 0
2989317 4610395144282 13 0
2989316 4610395144282 10 0
2989315 4610395144282 8 0
2989314 4610395144282 6 0
我想将所有这样的列(其中prod_id位置重复)标记为1
例如,我们可以看到Prod_id 4610395144282位置7出现了2次,因此我将忽略第一次出现,并将所有其他出现标记为1。
接下来是位置6多次出现。我将忽略第一次出现或最后一次出现,并为同一产品的相同位置将所有其他标记为status=1
第一个和最后一个按id过滤。按id顺序描述限制1
任何帮助都会很好。我可以通过使用distinct获得唯一行,但如何将其他行标记为状态1。我们使用php,希望找到一些快速的方法如果您使用的是MySQL 8.0版或更高版本,您可以使用窗口函数来实现这一点-
UPDATE YOUR_TABLE S
JOIN (SELECT *
FROM (SELECT *, ROW_NUMBER() OVER(PARTITION BY position ORDER BY id) RN
FROM YOUR_TABLE)
WHERE RN = 1) T ON S.id = T.id
AND S.prod_id = T.prod_id
AND S.position = T.position
SET S.status = 1;
如果您使用的是较低版本,则可以生成带有子查询的行号,如下所示:-
UPDATE YOUR_TABLE S
JOIN (SELECT id, prod_id, position
FROM (SELECT id, prod_id, @row_number:=CASE WHEN @position=position
THEN @row_number + 1
ELSE 1
END AS rn, @position:=position position
FROM YOUR_TABLE
CROSS JOIN (SELECT @row_number :=0, @position := 1) vars
GROUP BY position
HAVING COUNT(position) > 1
ORDER BY position) X
WHERE RN = 1) T ON S.id = T.id
AND S.prod_id = T.prod_id
AND S.position = T.position
SET S.status = 1;
您对一些缺陷提出了疑问:什么是第一个,什么是最后一个,行是如何按id排序的…………您的MySQL版本是什么?MySQL 5.6.47…………注释不用于扩展讨论;这段对话已经结束。