检查多列上的重复行

时间:2014-04-04 09:13:57

标签: php mysql sql

我有一个页面,可以上传excel文件并将其插入clients_to_call表。

client_to_call上,其中包括phone1phone2phone3列。

当用户上传Excel文件时,他一直要求以这种方式将Excel文件列与clients_to_call列匹配:

private name : (select tag with all of the Excel columns)
last name : (select tag with all of the Excel columns)
phone1 : (select tag with all of the Excel columns)
phone2 : (select tag with all of the Excel columns)
phone3 : (select tag with all of the Excel columns)
....

我正在尝试根据他的电话号码检查上传的客户端是否已经在clients_to_call表中。

我有两件事打断了我:每个客户都有3个不同的电话号码。并且他们不一定在同一列

用户可以像这样添加client1

client_to call: phone1 // Excel: home_phone
client_to call: phone2 // Excel: mobile_phone
client_to call: phone3 // Excel: work_phone

然后添加相同的客户端:

client_to call: phone1 // Excel: work_phone
client_to call: phone2 // Excel: home_phone
client_to call: phone3 // Excel: mobile_phone

此外,手机可以为空或仅包含-,当然我不希望它们被视为同一客户。

任何帮助或建议?

谢谢,Shabat shalom。

编辑:

我可以用非常低效和凌乱的方式来做到这一点。但是每个Excel文件包含大约5000个客户端,所以真正的问题是如何以最有效的方式实现它?

2 个答案:

答案 0 :(得分:2)

您必须根据列表检查表格中的每个电话,并确保不要在''或' - '上匹配。这或多或少:

select * 
from clients
where 
( phone1 in (home_phone, mobile_phone, work_phone) and phone1 not in ('', '-') )
or
( phone2 in (home_phone, mobile_phone, work_phone) and phone2 not in ('', '-') )
or
( phone2 in (home_phone, mobile_phone, work_phone) and phone2 not in ('', '-') );

答案 1 :(得分:1)

您可以实现一个功能,通过所有6个电话(3个来自字段,3个来自excel文件)并进行比较。如果手机实际上是相同的话,该功能(让我们将其命名为phoneCompare(...))将返回true。

然后可以在

中使用该功能
select *
from client_call
where phoneCompare(<all the fields and params>)=='different phones';