MYSQL Query über "teilbekannte" Spaltennamen

Loveboat

Erfahrenes Mitglied
Hallo zusammen,

habe mal wieder ein kleines Problem und hoffe jemand (evtl. Yaslaw :)) kann mir helfen.

Ich importiere eine CSV-Datei mittels eigenem Script erfolgreich in eine Tabelle.
Diese Tabelle beinhaltet dann zwischen 100-140 Spalten und u.U. mehrere hunderte von Zeilen.

Ich brauche als Ergebnis alle Zeilen, die in einer oder mehreren Spalten (hier das Problem: Die Spaltennamen sind aufgrund der Dynamik unbekannt, beinhalten aber eine Schlüssel-Abkürzung, z.b. "ABC") etwas stehen habe.


Ich kann das ganze natürlich auch über Schleifen abarbeiten, aber ich glaube das dies nicht sehr effizient ist.

Mittels diesem Code finde ich alle benötigten Spalten heraus um dann über Schleifen alle Zeilen zu finden.
Code:
SHOW COLUMNS FROM `temptable` WHERE FIELD LIKE '%ABC%'


Eine elegantere Lösung mittels SELECT wäre mir lieber.

Vielleicht hat ja jemand einen Ansatz.
Bei Fragen => her damit. :)

Danke und Gruß
Loveboat
 
Du importierst in eine Tabelle CSV-Daten ohne die Spaltenamen der Tabelle zu kennen?

Naja egal. Ich hatte mal was ähnliches bei Oracle. Habe da eine Externe Tabelle definiert die dann auf das CSV zeigt. Da kannst du dann auch 200 Spalten haben wenn du magst. Stört nicht wenn das CSV nur 100 hat. Der Vorteil da: die Spaltennamen der Externen Tabelle sind dir bekannt und die kannst du dann wie eine normale Tabelle abfragen. Kenne aber MySQL nicht ob die sowas auch haben.
 
Hm. Kurz forschen und testen mit HeidiSql

SQL:
-- Eine Kommaseparierte Liste aller Spalten als @cols auslesen
SELECT  GROUP_CONCAT(column_name SEPARATOR ',') INTO @cols
FROM    information_schema.columns
WHERE   table_name = 'test'; 

-- Das SQL zusammensetzen
SET @sql_text := CONCAT('SELECT ', @cols, ' FROM test');
-- SQL Statement vorbereiten
PREPARE STMT FROM @sql_text;
-- und und ausführen
EXECUTE STMT;

-- Prepared Statement wieder freigeben
DEALLOCATE PREPARE STMT;

Dabei hat mir diese Seite geholfen: http://rpbouman.blogspot.ch/2005/11/mysql-5-prepared-statement-syntax-and.html
 
Zuletzt bearbeitet von einem Moderator:
Hallo BaseBallBatBoy,

sorry wenn ich jetzt so hart bin aber Du scheinst es nicht richtig gelesen zu haben.
Meine Tabelle hat sehr wohl Spaltennamen (Eine Tabelle ohne Spaltennamen geht ja nicht) und der Inhalt der CSV-Datei ist auch schon geladen.

Nur ist diese Tabelle sehr dynamisch und die Spaltennamen variieren oft.
Entscheidend ist aber, das die bestimmten Spalten für mein Query eine Abkürzung beinhalten (z.B. "ABC").

Und wie auch schon erwähnt, mit Schleifen und so kann ich das Problem lösen, mir wäre aber eine elegantere Lösung mittels SQL-Query lieber als das Schleifen-Durchlaufen!
 
Hallo Yaslaw,

aber wo ist hier die Überprüfung auf die Spalten welche die Abkürzung "ABC" drin haben****
 
Im erstenSELECT. Sind halt Tabellennamen und Spalten von meinem Beispiel drin. Musst nur noch den WHERE Teil hinzufügen.
 
geht leider nicht, erhalte Fehlermeldung für Zeile 1

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near
 
Zurück