在colum的匹配的单词与多词串

时间:2016-05-23 08:31:27

标签: php mysql

我们正在根据帐号验证银行名称。

第三方API在提供帐号时会返回银行名称。这是一个多字符串,并且没有可以返回的固定值列表。

我们需要根据数据库中表格中的银行名称列表检查API返回的银行。为此,我们有一个表格,其中包含我们希望用于匹配的银行名称的同义词。请参阅下面的SQL。

要做到这一点,我们希望能找到一个“康”,“红色”和“红色”的匹配。或者'上海'在我们的表中,如果API返回'香港和上海银行公司'或者'香港&上海银行股份有限公司等

看到我们希望匹配表格中的单个单词,与多字词串相匹配,我不知道如何在MySQL中执行此操作。

我们数据库中银行名称表的SQL ....

CREATE TABLE IF NOT EXISTS `bank_names` (
  `bank_name_id` int(11) NOT NULL AUTO_INCREMENT,
  `bank` varchar(50) NOT NULL,
  PRIMARY KEY (`bank_name_id`),
  UNIQUE KEY `bank` (`bank`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

INSERT INTO `bank_names` (`bank`) VALUES
('kong'),
('hong'),
('shanghai'),
('westminster'),
('citi'),
('citibank');

我试过......

SELECT * 
FROM `bank_names` 
WHERE bank LIKE '%Hong Kong and Shanghai Banking Corporation%';

这显然不起作用。

提前谢谢。

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT * 
FROM `bank_names` 
WHERE  'Hong Kong and Shanghai Banking Corporation' LIKE CONCAT('%', bank, '%') ;

这应该返回OP中列出的前三个样本记录。

答案 1 :(得分:1)

使用IN()语句而不是LIKE

SELECT * FROM `bank_names`
WHERE `bank` in('Hong','Kong','and','Shanghai'...)

LIKE

SELECT * FROM `bank_names` t
WHERE '%Hong Kong and Shanghai Banking Corporation' like concat('%',t.bank,'%')

答案 2 :(得分:0)

使用INFIND_IN_SET ..

SELECT * 
FROM `bank_names` 
WHERE bank IN ('Hong', 'Kong', 'and', 'Shanghai', 'Banking', 'Corporation');

OR

SELECT * 
FROM `bank_names` 
WHERE FIND_IN_SET(bank, 'Hong', 'Kong', 'and', 'Shanghai', 'Banking', 'Corporation');