0

名前、カテゴリ、価格などの製品情報を保存するアプリを構築しています。

製品は複数のカテゴリに属する​​ことができるため、製品に対してこの情報を保持するためのカテゴリ テーブルがありますが、ユーザーが好きな言葉で製品を検索できるようにしたいと考えています。つまり、ユーザーは製品名、説明、カテゴリ、価格などを入力できます。すべてユーザー次第です。

私が推測しているクエリは(まだ構築されていないため)、次のようになります。

SELECT * FROM tbl_product 
JOIN tbl_category ON tbl_product.product_id = tbl_category.product_id
WHERE
    tbl_product.name LIKE $query
    OR tbl_product.description LIKE $query
    OR tbl_category.category etc.

このデータを保存する最良の方法は何だろうと思っていましたが、製品テーブルには現在整数 (1 = トップ、2 = ボトム、3 = 靴など) である製品タイプの列もありますが、ユーザーは検索していますtop は検索で 1 を入力せず、top または tops と入力します。整数に基づいて検索する方が速いことはわかっていますが、製品テーブルに「トップ」を格納して検索するか、「1」を格納して結合する方が速いでしょうか?

ありがとう

4

1 に答える 1

0

オプションとして - これが最良のオプションだと言っているわけではありませんが、うまくいく可能性があります - 主要な検索フィールドを単一のテキスト エントリとして保存する、製品のキーワード列を収集することです。

商品を作成または更新するときは、この文字列を再構築し、その列に対して単一の一致を実行します。

たとえば、次のような製品があるとします。

タイトル: クールなツール
本体: ライトセーバーが組み込まれたソケット レンチ
タグ: ツール、ライトセーバー、クール (これらはカテゴリのようにリレーショナルになりますが、たとえば、ここでは文字列としてリストしています)

そして、それはカテゴリToolsだけでなく、カテゴリにもありますCamping

保存 (追加または編集) すると、すべてのテキスト自体のコレクションである文字列を作成します。


「クールツールライトセーバーツール ライトセーバー クールツール キャンプを内蔵したソケットレンチ 」

たとえそれが冗長であっても。

次に、次のように検索します。

SELECT * FROM `products` WHERE MATCH(`search_terms`) AGAINST({search_term} IN BOOLEAN MODE)

そのため、クロス テーブルの where 句について心配する必要はありません。対戦に慣れる必要があるかもしれませんが、そのためのリソースはたくさんあります。

私はこれを以前にやったことがありますが、私にとっては非常にうまくいきました。パフォーマンスの問題はありませんでした。

于 2013-04-25T01:01:23.807 に答える