7

現在、次のような検索があります。

SELECT s.ID 
    FROM Shoe s
        INNER JOIN Account a
            ON s.UserID = a.ID
        WHERE s.Publish='1' AND
            (s.Brand LIKE '%$Search%'
             OR s.Name LIKE '%$Search%'
             OR s.PrimaryColor LIKE '%$Search%'
             OR a.User LIKE '%$Search%') 
        ORDER BY s.ID DESC
LIMIT $offset, $rowsPerPage"

これは、"Blue" や "Nikes" などの検索を実行すると問題なく動作しますが、"Blue Nikes" などの検索を実行しても何も返されません。使用する必要がありますFULLTEXTか? どうすればこれを改善できますか? 検索変数に関連する可能性のあるすべての列を検索できるようにしたいと考えています。

4

2 に答える 2

1

それで、いじってさまざまなことをテストした後、私はこれを思いつきました:

"FROM Shoe AS s
    LEFT JOIN Accounts AS a ON s.UserID = a.ID
    WHERE (MATCH (s.Brand, s.Name, s.PrimaryColor AGAINST('$Search' IN BOOLEAN MODE)
        OR MATCH (a.User) AGAINST('$Search' IN BOOLEAN MODE))
            AND s.Publish='1'
    ORDER BY s.ID DESC"

これで、上記の問題は解決したようです。「ブルー ナイキ」などの検索を実行すると、ブルーとナイキに関連するすべてのアイテムが表示されます。これが最も効率的な方法かどうかはわかりませんが、うまくいきます。

于 2012-10-12T20:55:18.167 に答える
0

または両方LIKEを使用する代わりに。SOUNDEX

次に、クエリを最適化して大文字を維持することができます。次に例を示します。

(lower(s.Brand) LIKE '%" . strtolower($Search) . "%'
OR lower(s.Name) LIKE '%" . strtolower($Search) . "%'
OR lower(s.PrimaryColor) LIKE '%" . strtolower($Search) . "%'
OR lower(a.User) LIKE '%" . strtolower($Search) . "%') 
于 2012-10-12T18:50:19.833 に答える