Ich habe eine Tabelle, die aus 64 verschiedenen Feldern besteht. Ich werde mit einem einzelnen Schlüsselwort darin suchen, Ergebnisse sollten das Schlüsselwort von irgendeinem Feld zusammenbringen. Gib einige Vorschläge.Durchsuchen Sie alle Spalten einer Tabelle mit einer einzigen where-Bedingung mit einem Schlüsselwort in mysql
Antwort
können Sie die in dem mit mehreren Bedingung verwenden, um mit OR
wie
where
name = 'expected'
OR rate ='expected'
OR country ='expected'
Wenn ich ODER verwende, muss ich alle 64 Felder verwenden. Gibt es dafür noch eine andere Lösung? –
Haben Sie meine Lösungen im selben Post überprüft? – instanceOfObject
@instanceOfObject was !!!! was willst du sagen?? –
ich nicht einen Weg, um Ihre Frage ist einfach, aber lange sehen:
SET @term = "Somesearch";
SELECT id, title FROM sometable WHERE
col1 LIKE '%@term%' OR
col2 LIKE '%@term%' OR
col3 LIKE '%@term%' ...;
statt Wenn Sie eine MySQL-Variable verwenden, können Sie einfach eine sprachspezifische Variable verwenden, aber aus Gründen der Beispiele dachte ich, ich würde bei MySQL bleiben.
Die "..." ist, wo Sie die anderen 61 Spalten/Felder platzieren würden.
Dies ist eine winzige Syntax, muss aber loooooooooong Codes schreiben :) –
Einfachste Lösung wäre die Verwendung mehrerer ORs
.
select * from TAB where col1 like "%VAR%" OR col2 like "%VAR%" OR......col64 like "%VAR%";
Sie können like
oder =
nach der Anforderung verwenden, aber es erfordert Ihre Abfrage jedes Mal, wenn Sie eine neue Spalte hinzufügen, ändern.
Als Alternative können Sie SQLDump for that table
und dann search
diese Datei nehmen.
Mit etwas googeln,
Prüfen Sie, ob dieses Projekt sinnvoll ist - http://code.google.com/p/anywhereindb/. Durchsucht alle Felder und wird von vielen gelobt.
Versuchen Sie, die Informationen aus
information_schema
Tabelle zu verwenden. Suchen Sie nach allen Spalten in der Tabelle. Versuchen Sie nun, Ihre Abfrage mithilfe dieser Informationen zu erstellen.
Wenn Sie diese SQL Server-Syntax MySQL übersetzen kann
WHERE
name = @keyword OR
country = @keyword OR
department = @keyword OR
@keyword IS NULL -- match all when search text is empty
Sie könnten eine Abfrage schreiben, die eine Abfrage für jede Spalte in der Tabelle generieren. Im Beispiel unter dem Schema („Eigentümer“ genannt) ist ‚DEV_USER‘ Die Tabelle mit 64 Feldern ‚customer_info‘ Die Kriterien bei der Suche aufgerufen wird, ist jede Spalte mit einem Wert von ‚VT‘ drin:
select 'SELECT ' || COLUMN_NAME || ' FROM CUSTOMER_INFO
WHERE ' || COLUMN_NAME || q'# LIKE '%VT%';#'
FROM ALL_TAB_COLS
WHERE OWNER = 'DEV_USER'
AND TABLE_NAME = 'CUSTOMER_INFO';
Diese eine Abfrage generiert eine Abfrage für jedes Feld für Sie. Die Ergebnisse der oben genannten wäre;
SELECT ADDRESS_1 FROM CUSTOMER_INFO
WHERE ADDRESS_1 LIKE '%VT%';
SELECT ADDRESS_2 FROM CUSTOMER_INFO
WHERE ADDRESS_2 LIKE '%VT%';
SELECT CITY FROM CUSTOMER_ADDRESSES_QASB
WHERE CITY LIKE '%VT%';
SELECT STATE_PROVINCE FROM CUSTOMER_INFO
WHERE STATE_PROVINCE LIKE '%VT%';
SELECT ZIP_POSTAL_CODE FROM CUSTOMER_INFO
WHERE ZIP_POSTAL_CODE LIKE '%VT%';
WHERE LATITUDE LIKE '%VT%';
... and so on for each column in the table
Dann fügen Sie einfach die Abfragen, die von Ihrer ersten Abfrage erzeugt wurden, in eine andere Registerkarte ein und führen sie aus.
Hoffe, dass hilft. :-)
Unglaublich ineffizient. –
SELECT * FROM `some_table`
WHERE
CONCAT_WS('|',`column1`,`column2`,`column3`,`column4`,`column64`) # single condition, many columns
LIKE '%VT%'
Voila.
Das '|' Das Trennzeichen soll übrigens verhindern, dass zufällige Übereinstimmungen gefunden werden, bei denen beispielsweise Spalte 1 in "V" endet und Spalte 2 mit "T" beginnt, was bei einer Suche nach "VT" ein falsches positives Ergebnis liefern würde.
Ich bin mir nicht sicher, ob die oben genannte Methode schneller als die OR
Methode ist (ich denke, sie sind die gleiche Geschwindigkeit), aber es erfordert definitiv weniger Eingabe, wenn Sie die Abfrage von Hand schreiben.
wäre Ein andere Möglichkeit, XML zu verwenden, um alle Spalten zu bekommen, um ein einzelnes Feld ... wie diese zu drucken:
SELECT c.*
FROM (
SELECT a.*
,(SELECT *
FROM table_to_search b
WHERE a.KeyField = b.KeyField
FOR XML RAW) AS `Full_Text_Record`
FROM table_to_search a) c
WHERE c.`Full_Text_Record` LIKE '%Search_string%'
eine Weile dauern könnte laufen, wenn es ein besonders großer Tisch ist, aber Es sollte Sie zwingen, herauszufinden, ob diese Zeichenfolge in einer bestimmten Tabelle existiert.
Wofür sind die eckigen Klammern? Dies ist MySQL, nicht SQL-Server. – Barmar
Danke Barmar ... guter Fang :-) – processoriented
'FOR XML RAW' ist ein Microsoft SQL Server-ism, nicht von MySQL unterstützt. –
Sie können dynamisches SQL verwenden, um eine Abfrage zu generieren und auszuführen, die alle Spalten durchsucht.
DELIMITER $$
CREATE PROCEDURE searchAllCols(inDB VARCHAR(64), inTable VARCHAR(64), search VARCHAR(32))
BEGIN
SET @matches = (
SELECT GROUP_CONCAT(CONCAT('`', COLUMN_NAME, '` LIKE "%', search, '%"') SEPARATOR ' OR ')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = inTable and table_schema = inDB);
PREPARE stmt FROM CONCAT('SELECT * FROM `', inDB, '`.`', inTable, '` WHERE ', @matches);
EXECUTE stmt;
END
$$
CALL searchAllCols('table_to_search', 'searchString');
- 1. Aktualisieren mehrerer Spalten einer Tabelle in einem einzigen Befehl
- 2. Exportieren einer Tabelle in MySQL mit Spalten mit Zeilenvorschub Zeichen
- 3. MySQL Wählen Sie alle Spalten aus einer Tabelle und einige aus einer anderen Tabelle
- 4. Liste spezifisch mit einer einzigen Tabelle
- 5. mysql ersetzt Spalten in einer Tabelle
- 6. Wählen Sie alle Spalten aus einer Tabelle und einige aus einer anderen mit linken Join
- 7. Join mehrere Spalten in einer Tabelle zu einer einzigen Spalte in einer anderen Tabelle
- 8. MySQL verkettet alle Spalten
- 9. mehrere Zeilen einer einzigen Tabelle
- 10. Wie kann ich alle Trigger in einer MySQL-Datenbank mit einer einzigen SQL-Anweisung löschen?
- 11. MYSQL unterschiedliche Bedingungen in einer einzigen Abfrage
- 12. Erstellen einer Tabelle in mysql
- 13. Definieren einer Tabelle mit sqlalchemy mit einem Mysql-Unix-Timestamp
- 14. Entfernen Sie Zeilen mit einem Schlüsselwort aus einer Datei
- 15. Wiederhole Spalten in einer Tabelle
- 16. Drop-Spalten aus einer Tabelle
- 17. Anzeigen von MySQL-Ergebnissen in einer einzigen Tabelle
- 18. Mit löst MySQL alle Tabellenänderungen zu einer sekundären Tabelle
- 19. So speichern Sie eine Tabelle (mit ihren Zeilen, Spalten und Zellen) in einem einzigen Feld in einer SQL-Datenbank
- 20. Alle Zeilen in einer Tabelle mit einer Schaltfläche erweitern/reduzieren
- 21. Mehrere Tabellen mit MySQL durchsuchen
- 22. Wie ersetze ich Wörter in einer Zeichenfolge, die mit einem Schlüsselwort in einem Array übereinstimmt, mit Daten aus einer Tabelle?
- 23. Datenmodellierung mehrerer Tabellen desselben Typs in einer einzigen Tabelle, um alle Tabellen in einer einzigen Tabelle zu aggregieren
- 24. Alter mehr Spalten in einer einzigen Anweisung
- 25. Verbinden einer MySQL-Tabelle mit einem DataGridView-Steuerelement in C#
- 26. Ändern Sie multiple Werte in einer Tabelle mit einer einzigen Aktualisierungsabfrage.
- 27. Löschen mehrerer Zeilen mit einer einzigen Abfrage
- 28. mysql - Tabellen zusammen in einer einzigen Abfrage
- 29. Durchsuchen einer MySQL-Tabelle unter Verwendung von PHP für mehrere Felder in einem Auto-Vervollständigen-Feld
- 30. TableSorter Filter - entferne alle Zeilen mit einem bestimmten Schlüsselwort
vergessen Sie nicht, klicken Sie auf das Häkchen und Upvote Antworten, die Ihnen geholfen haben. –
^Ich stimme völlig zu und habe ähnliche Gedanken :) – instanceOfObject
wähle * von * wo * wie% sucher_text%. Ist das möglich ??? –