Php 在表中查找重复项
我有一个结构如下的Php 在表中查找重复项,php,mysql,sql,Php,Mysql,Sql,我有一个结构如下的messcuts表。 id,student\u rollno,date 问题是有一些记录重复,即在同一个日期中有两个记录具有相同的student\u rollno。如何移除它们?例如: SELECT * FROM `messcuts` WHERE student_rollno = 'b070226' |id |student_rollno|date |259|B070226|2011-08-06 |260|B070226|2011-08-07 |1485|B07022
messcuts
表。id
,student\u rollno
,date
问题是有一些记录重复,即在同一个日期中有两个记录具有相同的student\u rollno
。如何移除它们?例如:
SELECT *
FROM `messcuts`
WHERE student_rollno = 'b070226'
|id |student_rollno|date
|259|B070226|2011-08-06
|260|B070226|2011-08-07
|1485|B070226|2011-08-12
|1486|B070226|2011-08-13
|1487|B070226|2011-08-14
|1488|B070226|2011-08-15
|2372|B070226|2011-08-27
|2369|B070226|2011-08-24
|2368|B070226|2011-08-23
|2371|B070226|2011-08-26
|2374|B070226|2011-08-29
|2373|B070226|2011-08-28
|2370|B070226|2011-08-25
|2367|B070226|2011-08-22
|2375|B070226|2011-08-30
|2376|B070226|2011-08-31
|2938|b070226|2011-08-06
见2011-08-06,有两项记录
select student_rollno, date
from messcuts
group by student_rollno, date
having count(*) > 1
并删除:
delete from messcuts d where d.id in (
select max(s.id)
from messcuts as s
group by s.student_rollno, s.date
having count(*) > 1)
CREATE VIEW dups AS
SELECT MAX(id) as id
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
如果不在mysql中工作:
delete from messcuts
using messcuts, messcuts as v_messcuts
where messcuts.id <> v_messcuts.id
and messcuts.student_rollno = v_messcuts.student_rollno
and messcuts.date = v_messcuts.date
从消息中删除
使用messcuts,messcuts作为v_messcuts
其中messcuts.id v_messcuts.id
和messcuts.student\u rollno=v\u messcuts.student\u rollno
和messcuts.date=v_messcuts.date
并删除:
delete from messcuts d where d.id in (
select max(s.id)
from messcuts as s
group by s.student_rollno, s.date
having count(*) > 1)
CREATE VIEW dups AS
SELECT MAX(id) as id
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
如果不在mysql中工作:
delete from messcuts
using messcuts, messcuts as v_messcuts
where messcuts.id <> v_messcuts.id
and messcuts.student_rollno = v_messcuts.student_rollno
and messcuts.date = v_messcuts.date
从消息中删除
使用messcuts,messcuts作为v_messcuts
其中messcuts.id v_messcuts.id
和messcuts.student\u rollno=v\u messcuts.student\u rollno
和messcuts.date=v_messcuts.date
这将显示重复项
SELECT *
FROM messcuts
WHERE (student_rollno,date) IN
(
SELECT student_rollno,date
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
)
DELETE FROM t2
WHERE id IN (SELECT id FROM dups)
并删除:
delete from messcuts d where d.id in (
select max(s.id)
from messcuts as s
group by s.student_rollno, s.date
having count(*) > 1)
CREATE VIEW dups AS
SELECT MAX(id) as id
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
您需要多次运行此操作以消除所有重复项
SELECT *
FROM messcuts
WHERE (student_rollno,date) IN
(
SELECT student_rollno,date
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
)
DELETE FROM t2
WHERE id IN (SELECT id FROM dups)
一旦删除了重复项,最好添加一个唯一的约束来阻止进一步的问题
ALTER TABLE messcuts ADD UNIQUE std_dte (student_rollno,date)
这将显示副本
SELECT *
FROM messcuts
WHERE (student_rollno,date) IN
(
SELECT student_rollno,date
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
)
DELETE FROM t2
WHERE id IN (SELECT id FROM dups)
并删除:
delete from messcuts d where d.id in (
select max(s.id)
from messcuts as s
group by s.student_rollno, s.date
having count(*) > 1)
CREATE VIEW dups AS
SELECT MAX(id) as id
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
您需要多次运行此操作以消除所有重复项
SELECT *
FROM messcuts
WHERE (student_rollno,date) IN
(
SELECT student_rollno,date
FROM messcuts
GROUP BY student_rollno,date
HAVING count(*)>1
)
DELETE FROM t2
WHERE id IN (SELECT id FROM dups)
一旦删除了重复项,最好添加一个唯一的约束来阻止进一步的问题
ALTER TABLE messcuts ADD UNIQUE std_dte (student_rollno,date)
我已经编辑了这些问题。请参阅。您想删除重复项还是进行不同的选择?如何决定删除哪些?我想删除重复项。请参阅此处我已编辑了问题。请参阅。是否要删除重复项或进行不同的选择?如何决定要删除哪些?我要删除重复项。请参阅此处我要删除重复项duplicates@Shahal,明智的做法是防止php脚本插入冗余数据:),所以请按照我的答案操作。一旦没有重复项,就不必担心删除它们:)@roselan:它显示以下错误:无法在FROM子句中为update指定目标表“messcuts”。我要删除duplicates@Shahal,明智的做法是防止php脚本插入冗余数据:),所以请按照我的答案操作。一旦没有重复项,就不必担心删除它们:)@roselan:它显示了以下错误:无法在FROM子句中为更新指定目标表“messcuts”。+1,我需要解释吗;)?有些人只是在否决+1之前不阅读,我需要解释吗;)?有些人只是在投票前不读书