Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.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 - Fatal编程技术网

Php 删除不同列上的相同值行

Php 删除不同列上的相同值行,php,mysql,Php,Mysql,我被困在一个非常基本的问题上,我想跳过在三列上有重复值的行 进餐 id,type,user_id,friend_id,date 1, 'friend', 4 , 5 , 5/5/2010 2, 'friend', 5 , 4 , 5/5/2010 现在,数据就是这样保存的(我无法更改保存模块) 因为两者都有相同的东西,所以我只想把它们选为1行,而不是2行。 我不想在PHP端验证和删除它,b/c如果我在PHP端验证和删除它,那么分页将受到干扰 编辑: 表结构 create table `feed

我被困在一个非常基本的问题上,我想跳过在三列上有重复值的行

进餐

id,type,user_id,friend_id,date
1, 'friend', 4 , 5 , 5/5/2010
2, 'friend', 5 , 4 , 5/5/2010
现在,数据就是这样保存的(我无法更改保存模块)

因为两者都有相同的东西,所以我只想把它们选为1行,而不是2行。 我不想在PHP端验证和删除它,b/c如果我在PHP端验证和删除它,那么分页将受到干扰

编辑:

表结构

create table `feed` (
    `id` double ,
    `type` blob ,
    `user_id` double ,
    `type_id` double ,
    `date` datetime 
); 
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('78','friends','1314','1313','2012-09-03 19:48:14');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('79','friends','1313','1314','2012-09-03 19:48:14');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('80','friends','1314','1312','2012-09-03 19:49:07');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('82','friends','1313','1312','2012-09-03 19:49:09');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('84','friends','1315','1312','2012-09-03 19:49:24');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('86','friends','1315','1313','2012-09-03 19:49:33');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('87','friends','1313','1315','2012-09-03 19:49:33');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('97','friends','1317','1312','2012-09-03 19:55:06');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('99','friends','1313','1317','2012-09-03 19:56:01');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('100','friends','1317','1313','2012-09-03 19:56:01');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('101','friends','1315','1317','2012-09-03 19:56:58');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('102','friends','1317','1315','2012-09-03 19:56:58');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('104','following','1313','1193','2012-09-03 19:59:39');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('105','following','1313','1308','2012-09-03 19:59:51');
insert into `feed` (`id`, `type`, `user_id`, `type_id`, `date`) values('106','following','1313','1098','2012-09-03 19:59:58');

您要查找的函数是DISTINCT()。这允许您按该列对表进行分组并删除重复项

只需确保在select语句中也选择了其他字段列:

从TABLENAME中选择
id
、DISTINCT(
type
)、
user\u id
friend\u id
date


您可以对表本身执行
JOIN
,这应该满足您的需要。 像这样的事情可能会奏效:

SELECT * FROM tableName a
JOIN tableName b ON a.user_id = b.friend_id

您应该通过运行以下命令来清除这些重复记录:

DELETE FROM table t1 WHERE
  EXISTS (
    SELECT * FROM table t2 
    WHERE t1.type=t2.type AND t1.date=t2.date 
      AND t2.user_id = t1.friend_id AND t2.friend_id = t1.user_id 
      AND t1.user_id > t2.user_id 
  )
然后,您可以通过以下方式获得清晰的友谊记录:

SELECT DISTINCT type, user_id, friend_id, date FROM table

此外,您还可以编写一个在INSERT时触发的DB触发器,用于检查是否已经存在重复的(具有反向的用户id和朋友id)。如果存在,它会回滚,否则允许插入。

这是最终的解决方案!如果存在相同的友谊对(反向),则只接受用户id>朋友id的友谊对

SELECT DISTINCT type, user_id, friend_id, date 
FROM table t1 
WHERE t1.user_id > t1.friend_id 
    OR NOT EXISTS (
        SELECT * FROM table t2 
            WHERE t1.type=t2.type AND t1.date=t2.date 
            AND t2.user_id = t1.friend_id AND t2.friend_id = t1.user_id 
    )

是否要删除相同的友谊记录?(就像在给定的记录中,“5是4的朋友”意味着“4是5的朋友”)是的,我想消除相同的友谊值,b/c 4->5和5->4是相同的。如果答案解决了您的问题,请单击绿色按钮将其标记为已接受。@Zar yes会这样做,但让我尝试一下,以他的例子为例,
user_id
在两行中不相等,因此它们不会像他所希望的那样与您的代码“合并”?不,这种区别在这种情况下不起作用,当我运行query@Zar时,它会获取一个用户id。@maginvegeta:Hm。。。您可能需要在WHERE和ORDER子句之间添加GROUP BY
type
。这不起作用。它甚至不采用不同的
类型
日期
列。