web-dev-qa-db-ja.com

mySQLのテーブル全体で文字列を検索する

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

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

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

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

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

SELECT * FROM `clients` IN 'Mary'
27
VoltzRoad

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

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

文字列演算子と正規表現の詳細については、SQLドキュメントを参照してください。

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

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

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

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

24
Artem Pyanykh

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

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を含むフィールドが検索されます。

14
Francis P

パターンマッチング with 'like'キーワードに加えて。次のように fulltext 機能を使用して検索を実行することもできます。

SELECT * FROM clients WHERE MATCH (shipping_name, billing_name, email) AGAINST ('mary')
7
Soner

テーブル全体を検索するための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);
4
Arpan Dubey

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

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

すべての一致は、各テーブルの個別のタブに表示されます-非常に素晴らしい。

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

4
gonzo

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

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

0
James Smith

特定の要件については、以下が検索に使用できます。

select * from table_name where (column_name1='%var1%' or column_name2='var2' or column_name='%var3%') and column_name='var';

データベースからデータを検索するためにクエリを実行する場合、これは完全に機能します。

0
user7957410

このコードを試して、

SELECT 
       * 
FROM 
       `customers` 
WHERE 
       (
          CONVERT 
               (`customer_code` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`customer_name` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`email_id` USING utf8mb4) LIKE '%Mary%' 
          OR 
          CONVERT(`address1` USING utf8mb4) LIKE '%Mary%' 
          OR
          CONVERT(`report_sorting` USING utf8mb4) LIKE '%Mary%'
       )

これは、問題mysqlバージョン5.7.21を解決するのに役立ちます

0
user10899318