2

テキスト フィールドを持つ MySQL テーブルがあります。フィールド名が Car だとしましょう。車のタイプはテキストです。名前、製品番号、日付、説明、住所、価格などの変数もあります。

ここで、そのテーブルから、車のフィールド値で見つかった変数を持つ行のみを選択したいと思います。

たとえば、変数に一致する行のみを検索したいのですが、車のテキストが次の場合、変数がname = Honda, product number = 4222, date = 20131223, description = very cool, .address = Street 59price = 15000

<category>Compact car
<name>Honda XxX
<colour>Black
<productnumber>4222
<date>20131223
<code>US
<description>very cool
<address>Street 59
<price>15000
// ...

次に、MySQL クエリはこの行のみを出力します。また、2 番目のバリアントとして、一致しない変数が 1 つしかない同様の行を出力したいと思います。たとえば、価格が一致しない場合は問題ありません。

MySQL でこれを行う方法がわかりません。誰かが知っていて、助けてくれるかもしれません。

このようなものが最初のバリアントで機能すると思います。

Select * From Car Where Car LIKE "%name%" AND Car LIKE "%productnumber%" AND ....

たぶん、誰かがより良い、より速い方法を知っているでしょう。例えば以下の方が良いでしょうか?

SELECT LOCATE("name", Car) AND LOCATE("productnumber", Car)

車の列をいくつかの列に分割してはいけません。これは条件です

4

1 に答える 1

1

列を複数の列 (情報ごとに 1 つ)に分割することは間違いありません。car次に、クエリは簡単になります。たとえば、次のようになります。

SELECT * FROM _table WHERE name = 'Honda' AND product_number = 4222 ...

...しかし、あなたの制約があれば、次のようなことができます:

SELECT * FROM _table
WHERE
    car LIKE '<name>Honda XxX' AND
    car LIKE '<productnumber>4222' ...

準備済みステートメントを使用する場合は、代わりに次のテンプレート クエリを使用することをお勧めします。

...
WHERE
    car LIKE CONCAT ('<name>', ?) AND
    car LIKE CONCAT('<productnumber>', ?)...

しかし、私が主張することを許可してください: あなたのアプリケーションが本番環境に入ることを意図していて、一握り以上のユーザーにサービスを提供することを計画している場合、またはこのテーブルに一握り以上のレコードがある場合は、担当者に次のことを伝えてください。この構造は非常貧弱です。インデックスは使用できず、すぐに使用できなくなります。

于 2013-07-11T09:59:37.043 に答える