mysql - 基于 select 进行更新以查找重复且小于

标签 mysql select comparison

我有一个名为 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/

相关文章:

php - 内部连接原则

c# - 为什么我的表适配器强制在我的日期列上强制转换为字符串

php - 如何在 MySQL 中创建区分大小写的 'select' 和 'like'?

java - 比较 boolean 值

java - 我可以忽略 "comparable"的使用吗

MySQL 获取具有多个过滤值的产品

php - 正则表达式:忽略字符串比较中的字符

mysql - 在更新查询中选择查询

mysql - 从数据库中按部分(MySQL)选择对象的最佳方法是什么?

.net - 比较对象时的 Equals 与 GetHashCode