我想删除除一行之外的所有内容,但与PHP结合使用。
我认为这对我的问题来说是一个更简单的解决方案,即删除重复的信息。
好的......我刚刚意识到我已经做过的事就是垃圾。
基本上我有一个表(dev_discs),我想在'discReference'列中搜索重复项,然后删除除一个之外的所有重复项,从而留下剩下的一行。
有一个简单的查询来做到这一点?我在网上遇到过类似的情况而且它们都很复杂......我认为这不是一个非常复杂的场景。
答案 0 :(得分:0)
没有简单的方法,AFAIK。使用PHP它应该不会太难(我可以想到你不能只使用SQL轻松地做到这一点)。
创建一个与原始表格结构相同的新表格:
CREATE TABLE dev_discs_noduplicates( ... );
使用GROUP子句从原始表中获取所有非重复数据,以消除重复:
SELECT * FROM dev_discs WHERE 1 GROUP BY dupe_col1,dupe_col2;
迭代结果并将它们插入新表:
INSERT INTO dev_discs_noduplicates ...;
删除旧表
DROP TABLE dev_discs;
重命名新表:
RENAME TABLE dev_discs_nodulicates TO dev_discs;
[编辑]
由于@xanatos正确地评论了数据库中可能的关系丢失,这里是一个涉及SQL和PHP的替代解决方案。
首先,获取唯一的行:
SELECT id FROM dev_discs GROUP BY col1, col2;
将这些内容放入PHP数组中,将其内化并在删除查询中使用:
DELETE FROM dev_discs WHERE (id) NOT IN ( @arr );
这应该解决所有可能的问题。
答案 1 :(得分:0)
DELETE FROM discs dd WHERE EXISTS
( SELECT * FROM discs d2
WHERE d2.discReference = dd.discReference
AND d2.rownumber < dd.rownumber
);
“rownumber”是一个内部ID,由您的DBMS提供。可以称为tid,oid。