我通过PHP CMS系统使用表单来定义自定义字段等。智能搜索的棘手SQL
其中一个自定义字段允许进行智能搜索的输入字段。这意味着当你开始输入时,它会显示匹配的记录,与google的建议非常相似。
smartsearch输入字段依赖于存储的mysql搜索,这就是我遇到的麻烦,因为它看起来太复杂了。
我打算从现有的搜索粘贴SQl,然后解释我正在尝试做什么。
有在数列中的不同的SQL查询,如下:
fromclause
((`clients` INNER JOIN `addresstorecord`
ON `clients`.`uuid` = `addresstorecord`.`recordid`
AND `addresstorecord`.`tabledefid`='tbld:6d290174-8b73-e199-fe6c-bcf3d4b61083'
AND addresstorecord.primary='1')
INNER JOIN `addresses` ON `addresstorecord`.`addressid` = `addresses`.`uuid`)
displayfield:
IF(clients.company != '',
CONCAT(clients.company,
IF(clients.lastname != '' OR clients.firstname != '',
CONCAT(' (',
IF(clients.lastname != '', clients.lastname, '{blank}'),
', ',
IF(clients.firstname != '', clients.firstname, '{blank}'),
')'),
'')
),
IF(clients.lastname != '' OR clients.firstname != '',
CONCAT(IF(clients.lastname != '', clients.lastname, '{blank}'),
', ',
IF(clients.firstname != '', clients.firstname, '{blank}')),
''))
)
secondaryfield:
IF(addresses.city != '' OR addresses.state !='' OR addresses.postalcode != '',
CONCAT(IF(addresses.city != '', addresses.city, ''),
', ',
IF(addresses.state != '', addresses.state, ''),
' ',
IF(addresses.postalcode != '', addresses.postalcode, '')),
'unspecified location')
classfield
clients.type
searchfields
clients.company, clients.firstname, clients.lastname
filterclause
clients.inactive=0
我无法理解这些查询是如何工作的。显示字段和次字段看起来非常多余。
我不认为我的需求与目前的智能搜索领域的工作原理是如此不同......而不是客户我想客人,而不是地址,我只是希望它匹配名字,姓氏或护照号码。
我想知道在这种情况下我是否需要次中场?
特别是,内中fromclause加入混淆了我,因为我不认为我需要做的,因为所有的客户信息是在一个表...
这里的任何帮助是非常赞赏,谢谢。
你能提供整个查询作为一个块,所以我们可以看到什么是实际正在查询从数据库? – bpeterson76 2010-06-30 17:53:52
我该怎么做?我不认为我可以......我认为智能搜索字段根据输入内容做了不同的查询。 – Jacob 2010-06-30 17:56:25