2016-05-23 14 views
0

アカウント番号に対して銀行名を検証しています。複数ワード列の列内の単一ワードの一致

サードパーティAPIは、アカウント番号が指定されている場合、銀行名を返します。これは複数単語の文字列であり、返される値の固定リストはありません。

Googleのデータベースにあるテーブル内の銀行名のリストに対して、APIから返された銀行を確認する必要があります。これを行うには、マッチングに使用する銀行名の同義語を持つ表があります。以下のSQLをご覧ください。

APIが「香港と上海銀行公社」または「香港&上海銀行公司」を返した場合は、「kong」、「hong」または「shanghai」と一致することを確認します'など

テーブル内の1つの単語と複数の単語の文字列を照合してみると、私はこれを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%'; 
を試してみました。

ありがとうございます。

+0

あなたは 'FIND_IN_SET'または' IN'を使うことができます...あなたの文字列を配列に変換して使用してください。 –

答えて

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,'%') 
1

はこれを試してみてください:OPに記載されているよう

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

これは最初の3つのサンプルレコードを返す必要があります。

0

使用INまたはFIND_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'); 
関連する問題