0

データベースの列にカンマ区切りのタグのリストがあります。単純なワイルドカードを使用して、検索対象のタグに一致するアイテムを取得していました。ただし、一部のタグが他のタグのタイトルの一部として含まれており、それらも返されていることがわかりました。たとえば、これらの行をハンティングするための検索が返される場合があります。

hunting, fishing, outdoors <-- Should be returned
sporting goods, hunting    <-- Should be returned
bargain hunting, sale      <-- Should NOT be returned
bullets, guns, hunting     <-- Should be returned

現在私は使用しています:

WHERE column LIKE '%hunting%'

これらのコンマ区切りリストを使用して、これをより適切に機能させるにはどうすればよいですか。また、一部の行にはタグが 1 つしかなく、コンマがまったくない場合があることに注意してください。ありがとう。

4

3 に答える 3

1
select * from Table1
where find_in_set('hunting',`text`) 
or find_in_set(' hunting',`text`)

サンプルフィドル

于 2013-09-04T04:15:58.063 に答える
1

正規表現を使用しない場合:

WHERE column LIKE '%, hunting' 
   OR column LIKE '%, hunting,%'
   OR column LIKE 'hunting, %'

デモを見る

ここでの解決策は、テーブルを正規化することです。

CREATE TABLE products
    (`id` int, `name` varchar(4));

INSERT INTO products
    (`id`, `name`)
VALUES
    (1, 'gun'), 
    (2, 'fish');

CREATE TABLE keywords
    (`id` int, `keyword` varchar(15));

INSERT INTO keywords
    (`id`, `keyword`)
VALUES
    (1, 'hunting'),
    (2, 'fishing'),
    (3, 'outdoors'),
    (4, 'sporting goods'),
    (5, 'bargain hunting'),
    (6, 'sale'),
    (7, 'bullets'),
    (8, 'guns');


CREATE TABLE productKeywords
    (`productId` int, `keywordId` int);

INSERT INTO productKeywords
    (`productId`, `keywordId`)
VALUES
    (1, 1),
    (1, 3),
    (1, 4),
    (2, 2),
    (2, 5);
于 2013-09-03T23:09:39.267 に答える