0

私のテーブルを考えると

id | name
 01| Test Name
 02| Name Test
 03| Another name
 ...
 ...
 nn| Test string

次のことを行います。各エントリについて、スペースまで最初の単語を読みます。この例では、Testを読み、文字列の任意の場所にTestを含むすべての同様のエントリを見つけて、 Nameを続行します。別の、など。

多くのクエリを実行する必要があるため、これを手動で実行したくありません。データは古いExcelスプレッドシートからインポートされ、クライアントは繰り返し名前を取得したいので、名前をテスト、名前テストします。とNameTestは、類似した可能性のある名前です。

4

3 に答える 3

3

クエリを実行し、すべての名前を選択してphpに返し、ループして文字列を個別の単語に解析し、全文インデックスを使用してクエリを実行します。

ここにあなたが始めるための何かがあります。 http://www.databasejournal.com/sqletc/article.php/1578331/Using-Fulltext-Indexes-in-MySQL---Part-1.htm

于 2012-09-06T00:04:24.503 に答える
2

これが私のdbソリューションです:

SELECT * 
FROM princess a
INNER JOIN (SELECT 
        DISTINCT CASE
            WHEN name LIKE '% %' 
                THEN SUBSTR(name, 1, LOCATE(' ', name) - 1)
            ELSE name
        END AS 'name'
    FROM princess) b ON a.name LIKE CONCAT('%', b.name ,'%')

DISTINCTこれにより、名前(スペースの前)が検索され、次に。JOINを使用して元のテーブルが検索されますLIKE

見た目によってINSTR(a.name, b.name)は、代わりに使用することも検討してb.name LIKE CONCAT('%', a.name ,'%')ください。EXPLAIN

于 2012-09-06T00:24:07.280 に答える
0

MySQLで文字列を複数の行に分割する方法の例はたくさんあります(例:これ) 。

その後、完全一致を簡単に見つけることができます。完全に一致しないものが必要な場合は、チェックアウトしてくださいSOUNDEX()

于 2012-09-06T00:15:53.707 に答える