2011-08-16 64 views
0

试图将SQL Server与jQuery自动完成一起使用。在检查使用匹配域输入的术语时,我可以得到以下工作,但我还希望自动填充检查是否为联系人姓名(名字和姓氏)找到匹配项。PHP SQL Server Concat

有没有办法(比如在mySQL中)连接fname和lname?

域名只:

($项=在自动完成框中输入的数据)

SELECT distinct comp_companyid, comp_name, comp_emailaddress, comp_website, pers_firstname, pers_lastname, addr_address1, addr_address2, addr_city, addr_state, addr_postcode 
FROM company, person, address, address_link 
WHERE pers_companyid = comp_companyid 
    AND addr_addressid = adli_addressid 
    AND adli_companyid = comp_companyid 
    AND comp_website LIKE '%".$term."%'; 

我在匹配的名称,以及尝试:

SELECT distinct comp_companyid, comp_name, comp_emailaddress, comp_website, pers_firstname, pers_lastname, addr_address1, addr_address2, addr_city, addr_state, addr_postcode 
FROM company, person, address, address_link 
WHERE pers_companyid = comp_companyid 
    AND addr_addressid = adli_addressid 
    AND adli_companyid = comp_companyid 
    AND comp_website LIKE '%".$term."%' 
    OR pers_firstname + ' ' + pers_lastname LIKE '%".$term."%'; 
+1

,我希望你知道如何不安全的,这是。 –

+1

当心SQL注入的人!使用参数! – MaxiWheat

+1

很明显,我没有在这里发布我的整个代码。我不傻。大声笑。 – JimmyJammed

回答

0

想通了:

SELECT * FROM <TABLES> WHERE (website LIKE '%".$term."%' OR (firstname +' '+ lastname) LIKE '%".$term."%'; 
0

除了安全问题,这将会变得缓慢。您需要创建一个等于第一个+最后一列的虚拟视图。 (在SQL女士,我相信这会看起来像):

select a.id, v.fullname 
from (select concat(first_name, " ", last_name) as fullname, id) v 
where a.id = v.id 
and fullname like '%searchterm%' 

既然你还没有告诉MS SQL索引对这个组合的是,这将需要一段时间。您应该考虑更多全文搜索解决方案。

你可以匹配第一个或最后与像术语:

WHERE ( 
    firstname like '%searchterm%' 
    or lastname like '%searchterm%' 
    or comp_website like '%searchterm%') 
AND [other_clauses_here] 

这会更快。但最终,这种方法失去了动力,当你想要考虑更好的全文搜索解决方案时。