使用php在MySql中标记重复项(不删除)
因此,我在使用MySQL查询时遇到了一些问题(请参阅),并决定尝试另一种方法 我有一个数据库表,其中有一些重复的行,我实际上可能需要这些行作为将来的参考,所以我不想删除它们。我要寻找的是一种显示数据的方法,不需要重复,但不需要删除它们。我不能使用简单的select查询(如另一个问题中所述) 因此,我需要做的是编写一个代码,执行以下操作: 1.检查我的数据库表。 2.在“ip”列中查找重复项。 3.将每个副本的第一个实例标记为“0”(在名为“duplicate”的列中),其余实例标记为“1” 这样,我以后只能选择duplicate=0的行 注意:如果您的解决方案与SELECT查询相关,请先阅读本文-这是我不使用GROUP BY/DISTINCT的原因使用php在MySql中标记重复项(不删除),php,mysql,duplicates,Php,Mysql,Duplicates,因此,我在使用MySQL查询时遇到了一些问题(请参阅),并决定尝试另一种方法 我有一个数据库表,其中有一些重复的行,我实际上可能需要这些行作为将来的参考,所以我不想删除它们。我要寻找的是一种显示数据的方法,不需要重复,但不需要删除它们。我不能使用简单的select查询(如另一个问题中所述) 因此,我需要做的是编写一个代码,执行以下操作: 1.检查我的数据库表。 2.在“ip”列中查找重复项。 3.将每个副本的第一个实例标记为“0”(在名为“duplicate”的列中),其余实例标记为“1” 这样
提前感谢。MySQL没有任何排名/分析/窗口功能,但您可以使用变量:
SELECT t.ip,
CASE
WHEN @ip != t.ip THEN @rank := 0
ELSE @rank := @rank + 1
END AS duplicate,
@ip = t.ip
FROM TABLE t
JOIN (SELECT @rank := 0, @ip = NULL) r
ORDER BY t.ip
第一次出现的ip
值在duplicate
列中的值为零;所有后续记录的值都将递增1。如果不需要递增的数字,请使用:
SELECT t.ip,
CASE
WHEN @ip != t.ip THEN 0
ELSE 1
END AS duplicate,
@ip = t.ip
FROM TABLE t
JOIN (SELECT @ip = NULL) r
ORDER BY t.ip
通过在子查询中使用它,可以从中获取唯一IP行的列表:
SELECT x.ip
FROM (paste either query in here) x
WHERE x.duplicate = 0
哪张唱片是第一张重要吗?如果是的话,你如何确定哪一个副本是第一个呢?实际上并不重要。只要我留着一个,其余的留着记号。这不是一个正确的答案吗@几乎没有。还有一个最终成功了。谢谢大家的努力@天哪,你的回答很有帮助。