web-dev-qa-db-ja.com

mysqlは複数の単語と一致します

以下は私が立ち往生しているSQLの例です。「iphone4s」という名前の製品は返されません。他に10個の結果が返されます。どんな助けでも大いに感謝します

最初のSQLの例

SELECT * FROM products 
          WHERE match(desc) against('+iphone +4s' IN BOOLEAN MODE) LIMIT 10";

結果:「iphone」と「4s」という単語が含まれています

2番目のSQLの例

SELECT * FROM products 
           WHERE match(desc) against('+iphone 4s' IN BOOLEAN MODE) LIMIT 10";

結果:「iphone」という単語が含まれますが、「4s」も含まれている場合は行のランクが高くなります

3番目のSQLの例

SELECT * FROM products 
           WHERE match(desc) against('iphone 4s' IN BOOLEAN MODE) LIMIT 10";

結果:「iphone」または「4s」という単語が含まれます

私が検索したいのは「iphone4s」ですが、「iphoneは良いですが、4s ...」、「新しいiphone 5が公開されました...」、...などの他の結果が表示されます。

誰かが私がそれを解決するのを手伝ってくれる?ありがとう。

14
風吟月

正確なフレーズに一致させるには、一致するフレーズを二重引用符で囲みます。

SELECT * 
FROM products 
WHERE MATCH(desc) 
      AGAINST('"iphone 4s"' IN BOOLEAN MODE) 
LIMIT 10

詳細はマニュアルページを参照

16

[〜#〜] regexp [〜#〜] を使用します

SELECT * FROM products 
WHERE desc REGEXP 'iphone[[. .]]*4s'
LIMIT 10;

SQLFiddleデモ

0
valex