0

単一の検索ボックスを使用して、発注書ID(主キー)または発注書の名前に基づいて発注書をフィルタリングします。

likeパラメータを使用して名前フィールドを検索しましたが、主キーでは機能しないようです。これは、id(s)にequal演算子を使用する場合にのみ機能します。ただし、like for idを使用して発注書をフィルタリングできると、望ましいでしょう。これを行う方法?

create table purchase_orders (
id int(11) primary key,
name varchar(255),

...
)
4

2 に答える 2

0

オプション1

SELECT *
FROM purchase_orders
WHERE id LIKE '%123%'; -- tribute to TemporaryNickName

これは恐ろしい、パフォーマンスの観点からです:)

オプション 2a

の文字列バージョンを受け取るテキスト列を追加しますid。おそらく、いくつかのトリガーを追加して、自動的に入力します。

オプション 2b

id列のタイプをCHARorに変更しますVARCHARCHAR主キーには優先する必要があると思います)。

両方で2a。および2b。FULLTEXT場合は、この列にインデックス (おそらく 1) を追加します。

于 2013-01-23T09:01:00.823 に答える
0

LIKE が機能するはずだと思います。SQLが正しく書かれていないと思います。注文名が「ABCDEF」であると仮定すると、次のクエリ構造を使用してこれを見つけることができます。

SELECT id FROM purchase_orders WHERE name LIKE '%CD%';

説明すると、% 記号はワイルドカードであることを意味します。結果として、このクエリは、内部に「CD」を含むすべての文字列を選択します。

テーブル構造によると、varchar には 255 文字を含めることができます。これは非常に大きな文字列であり、おそらく多くのリソースを消費し、 LIKEなどの SQL 関数を使用して何かを検索するにはより多くの時間がかかると思います。IDでいつでも検索できます

WHERE id = something. これははるかに高速な方法です。

、しかし、注文IDはユーザーフレンドリーなデータではないと思います。代わりに、ユーザーに製品名を使用させます。私の推奨事項は、apache Lucene または MySQL の全文検索機能 (検索パフォーマンスを向上させることができます) を使用することです。

アパッチ・ルセン

MySQL 全文検索機能

これらは、大きな文字列のリストから特定のパターンまたは単語をより高速に検索するために構築されたツールです。多くの Web サイトでは、これを使用して独自のミニ検索エンジンを構築しています。mysql の全文検索機能は学習曲線をほとんど必要とせず、簡単に =D を使用できることがわかりました

于 2013-01-23T09:05:02.847 に答える