it-swarm.com.de

Durchsuchen Sie eine ganze Tabelle in mySQL nach einem String

Ich versuche, eine ganze Tabelle in mySQL nach einem String zu durchsuchen. 

Ich möchte alle Felder und alle Hauptstriche einer Tabelle durchsuchen und jeden vollständigen Eintrag zurückgeben, der den angegebenen Text enthält.

Ich kann nicht leicht herausfinden, wie ich mehrere Felder einfach durchsuchen kann. Hier sind die Details:

Die Tabelle ist "Kunden". Es hat etwa 30 Felder und 800 Einträge, die zu viel sind, um sie gleichzeitig in einem Browser anzuzeigen. Ich möchte nach einem Namen suchen (d. H. "Mary"), er könnte jedoch im shipping_name field oder im billing_name field oder im email-Feld usw. stehen. 

Ich möchte in allen Feldern nach Einträgen suchen, die die Zeichenfolge "Mary" enthalten. Ich denke, das sollte funktionieren, aber nicht:

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

Versuchen Sie etwas so:

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

Unter Umständen möchten Sie SQL-Dokumente mit zusätzlichen Informationen zu Zeichenfolgenoperatoren und regulären Ausdrücken anzeigen.

Bearbeiten: Es gibt möglicherweise Probleme mit NULL-Feldern. Falls Sie IFNULL(field_i, '') anstelle von field_i verwenden möchten, sollten Sie dies jedoch tun.

GroßKleinschreibung - /: Sie können die Sortierung ohne Berücksichtigung der Groß- und Kleinschreibung oder etwas ähnliches verwenden:

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

Nur Feld durchsuchen : Ich glaube, es gibt keine Möglichkeit, eine SQL-Abfrage zu erstellen, die alle Felder durchsucht, ohne das Feld explizit für die Suche zu deklarieren. Der Grund ist, dass es eine Theorie relationaler Datenbanken und strikte Regeln für die Manipulation gibt relationale Daten (so etwas wie relationale Algebra oder Codd-Algebra; das ist, woraus SQL stammt), und theoretisch sind Dinge wie "nur Felder durchsuchen" nicht zulässig. Natürlich hängt das tatsächliche Verhalten von der konkreten Umsetzung des Anbieters ab. Im Normalfall ist dies jedoch nicht möglich. Überprüfen Sie zur Sicherheit die Operator-Syntax SELECT (genauer WHERE-Abschnitt).

21
Artem Pyanykh

Identifizieren Sie alle Felder, die mit Ihrer Suche in Zusammenhang stehen könnten, und verwenden Sie dann eine Abfrage wie:

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)

Wenn Sie LIKE '%Mary%' anstelle von = 'Mary' verwenden, wird nach Feldern gesucht, die someCaracters + 'Mary' + someCaracters enthalten.

14
Francis P

Zusätzlich zu Musterabgleich mit "like" -Schlüsselwort. Sie können auch searchby mit fulltext feature wie unten beschrieben ausführen.

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

Eine PHP basierte Lösung für die Suche der gesamten Tabelle! Suchstring ist $ string. Dies ist generisch und funktioniert mit allen Tabellen mit einer beliebigen Anzahl von Feldern

$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);
3
Arpan Dubey

Wenn Sie nur nach Text suchen und keine Ergebnismenge für Programmierzwecke benötigen, können Sie HeidiSQL kostenlos installieren (ich verwende v9.2.0.4947).

Klicken Sie mit der rechten Maustaste auf eine Datenbank oder Tabelle und wählen Sie "Text auf dem Server suchen".

Alle Übereinstimmungen werden für jede Tabelle in einer separaten Registerkarte angezeigt - sehr schön.

Erschreckend nützlich und hat mir Stunden gespart. Vergessen Sie sich mit langatmigen Fragen!

3
gonzo

Wenn Sie Sublime verwenden, können Sie mit Text Pastry in Verbindung mit der Auswahl mehrerer Zeilen und Emmet problemlos Hunderte oder Tausende von Zeilen erzeugen.

In meinem Fall habe ich den Dokumenttyp auf html gesetzt, dann div*249 eingegeben, die Tabulatortaste gedrückt und Emmet erstellt 249 leere divs. Dann benutzte ich die Mehrfachauswahl und gab col_id_ in jede ein und löste Text Pastry aus, um eine inkrementelle ID-Nummer einzufügen. Bei erneuter Mehrfachauswahl können Sie dann das Markup div löschen und durch die MySQL-Syntax ersetzen.

0
James Smith

für bestimmte Anforderungen funktioniert Folgendes für die Suche:

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

wenn Sie nach Daten aus der Datenbank suchen möchten, funktioniert dies einwandfrei.

0
user7957410

Versuchen Sie diesen Code,

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%'
       )

Dies ist Hilfe zur Lösung Ihres Problems mysql Version 5.7.21

0
user10899318