我有一个页面,可以上传excel文件并将其插入clients_to_call
表。
在client_to_call
上,其中包括phone1
,phone2
和phone3
列。
当用户上传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个客户端,所以真正的问题是如何以最有效的方式实现它?
答案 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';