31

mySQL のテーブル全体で文字列を検索しようとしています。

テーブルのすべてのフィールドとすべてのメインディッシュを検索し、指定されたテキストを含む完全な各エントリを返します。

複数のフィールドを簡単に検索する方法がわかりません。詳細は次のとおりです。

テーブルは「クライアント」です。約 30 のフィールドと 800 のエントリがあり、ブラウザで一度に表示するには多すぎます。名前 (「Mary」など) を検索したいのですが、 、 、 フィールドなどにある可能性がshipping_name fieldありbilling_name fieldますemail

文字列「Mary」を含むエントリをすべてのフィールドで検索したいと思います。これは私がうまくいくはずだと思うものですが、うまくいきません:

SELECT * FROM `clients` IN 'Mary'
4

8 に答える 8

29

次のようなことを試してください:

SELECT * FROM clients WHERE CONCAT(field1, '', field2, '', fieldn) LIKE "%Mary%"

文字列演算子と正規表現に関する追加情報については、SQL ドキュメントを参照してください。

IFNULL(field_i, '')編集: NULL フィールドにはいくつかの問題がある可能性があるため、念のため、代わりに使用したい場合がありますfield_i

大文字と小文字の区別: 大文字と小文字を区別しない照合または次のようなものを使用できます。

... WHERE LOWER(CONCAT(...)) LIKE LOWER("%Mary%")

すべてのフィールドを検索するだけ: 検索するフィールドを明示的に宣言せずにすべてのフィールドを検索する SQL クエリを作成する方法はないと思います。その理由は、リレーショナル データベースの理論と、リレーショナル データを操作するための厳密な規則 (何か関係代数やコッド代数のように; これらは SQL の元になっているものです)、理論では「すべてのフィールドを検索するだけ」などは許可されていません。もちろん、実際の動作はベンダーの具体的な実現に依存します。しかし、一般的にそれは不可能です。SELECT念のため、演算子の構文 (WHERE正確にはセクション) を確認してください。

于 2012-08-13T18:11:53.703 に答える
15

検索に関連する可能性のあるすべてのフィールドを特定し、次のようなクエリを使用します。

SELECT * FROM clients
WHERE field1 LIKE '%Mary%'
   OR field2 LIKE '%Mary%'
   OR field3 LIKE '%Mary%'
   OR field4 LIKE '%Mary%'
   ....
   (do that for each field you want to check)

LIKE '%Mary%'の代わりに使用する= 'Mary'と、someCaracters + 'Mary' + someCaracters を含むフィールドが検索されます。

于 2012-08-13T18:11:59.867 に答える
7

「like」キーワードによるパターン マッチングに加えて。以下のようにフルテキスト機能を使用して検索を実行することもできます。

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')
于 2015-03-02T13:52:41.090 に答える
5

テキストを探しているだけで、プログラミング目的で結果セットを必要としない場合は、HeidiSQL を無料でインストールできます(私は v9.2.0.4947 を使用しています)。

データベースまたはテーブルを右クリックし、[サーバー上のテキストを検索] を選択します。

すべての試合が各テーブルの個別のタブに表示されます - とてもいいですね。

驚くほど便利で、何時間も節約できました。長いクエリをいじるのを忘れてください!!

于 2015-05-21T14:25:08.660 に答える
4

テーブル全体を検索するための PHP ベースのソリューションです。検索文字列は $string です。これは一般的なもので、任意の数のフィールドを持つすべてのテーブルで機能します

$sql="SELECT * from client_wireless";
$sql_query=mysql_query($sql);
$logicStr="WHERE ";
$count=mysql_num_fields($sql_query);
for($i=0 ; $i < mysql_num_fields($sql_query) ; $i++){
 if($i == ($count-1) )
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' ";
else
$logicStr=$logicStr."".mysql_field_name($sql_query,$i)." LIKE '%".$string."%' OR ";
}
// start the search in all the fields and when a match is found, go on printing it .
$sql="SELECT * from client_wireless ".$logicStr;
//echo $sql;
$query=mysql_query($sql);
于 2013-08-13T04:46:24.063 に答える
0

Sublime を使用している場合は、Text Pastryと複数行選択およびEmmetを組み合わせて使用​​すると、何百または何千もの行を簡単に生成できます。

したがって、私の場合、ドキュメント タイプを html に設定してから、 と入力div*249してタブを押すと、Emmet は 249 個の空の div を作成します。次に、複数選択を使用してcol_id_、それぞれに入力し、Text Pastry をトリガーして増分 ID 番号を挿入しました。次に、もう一度複数選択して、divマークアップを削除し、MySQL 構文に置き換えることができます。

于 2015-02-02T12:03:31.180 に答える