Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在表中查找重复项_Php_Mysql_Sql - Fatal编程技术网

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之前不阅读,我需要解释吗;)?有些人只是在投票前不读书