我通過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