我有一个名为 content 的表,其中包含以下字段:id(键)、标题、别名、状态和点击数。
有很多重复记录(不同的 ID,但相同的标题和相同的别名)。 “状态”字段控制记录是已发布 (1) 还是未发布 (0)。
目前我能够取消发布重复的记录:
UPDATE content
SET content.state = 0
WHERE content.alias IN
(
SELECT alias FROM
(
SELECT `alias`, COUNT(*) `tot`
FROM `content`
GROUP BY `alias`
HAVING `tot` > 1
) AS tmptable
)
但这并没有考虑哪条记录具有更大的“点击率”。
我的目标是取消发布点击量较小的重复记录。
最佳答案
我建议改为使用此查询:
UPDATE content
SET content.state = 0
WHERE content.alias IN
(
SELECT DISTINCT c1.`alias`
FROM `content` c1, `content` c2
WHERE c1.`id` <> c2.`id`
AND c1.`alias` = c2.`alias`
AND c1.`hits` <= c2.`hits`
) AS tmptable
子查询将选择命中较小的重复别名。
关于mysql - 基于 select 进行更新以查找重复且小于,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12390461/