# MYSQL Query über "teilbekannte" Spaltennamen



## Loveboat (25. Juni 2013)

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.

```
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


----------



## BaseBallBatBoy (25. Juni 2013)

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.


----------



## Yaslaw (25. Juni 2013)

Hm. Kurz forschen und testen mit HeidiSql


```
-- 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


----------



## Loveboat (25. Juni 2013)

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!


----------



## Loveboat (25. Juni 2013)

..und wie erhofft eine Antwort von Yaslaw! 
teste ich direkt mal.


----------



## Loveboat (25. Juni 2013)

Hallo Yaslaw,

aber wo ist hier die Überprüfung auf die Spalten welche die Abkürzung "ABC" drin haben****


----------



## Yaslaw (25. Juni 2013)

Im erstenSELECT. Sind halt Tabellennamen und Spalten von meinem Beispiel drin. Musst nur noch den WHERE Teil hinzufügen.


----------



## Loveboat (25. Juni 2013)

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


----------



## Yaslaw (25. Juni 2013)

über was für ein Tool versuchst du es?


----------



## Loveboat (25. Juni 2013)

phpmyadmin, aber auch über mein PHP-Script kommt nix...


----------



## Yaslaw (25. Juni 2013)

phpmaydmin kannst du für komplexere Sachen eh vergessen. Ich habe noch nicht festgestellt wie man dort sauber eine Session abarbeiten kann. Ich teste mit HeidiSql.
Und beim PHP-Script kommt es halt drauf an wie du es anwendest. Dort würde ich das SQL eh mit PHP zusammensetzen und nicht mit SQL.


----------



## Loveboat (25. Juni 2013)

ja, aber wie müsste dann mein SQL-Statement aussehen****? Ich blicke gerade nicht was Du meinst.

ich habe auch im ersten SELECT meine WHERE-Clause angepasst, aber immer nur Fehler....
das funktioniert so nicht..... :-(

*werde jetzt erstmal mein Autoradio einbauen, mein Kopf brummt schon und evtl. Hat Yaslaw dann das was ich brauche****?


----------



## Yaslaw (25. Juni 2013)

http://www.tutorials.de/content/872-netiquette.html


> Bitte erstelle keine Doppel-/Mehrfach-/Pushpostings. Dazu zählen insbesondere das Erstellen identischer Themen in mehreren unterschiedlichen Unterforen, das mehrfache oder erneute Einstellen eines bereits vorhandenen Themas, und das Posten von Beiträgen, die einzig und allein dem Zweck dienen, das entsprechende Thema in der Themenauflistung wieder weiter oben zu platzieren (sog. „Thread Pushing“). Derartige Beiträge werden restlos gelöscht. Sollte der Eindruck bei unseren Moderatoren entstehen, dass wissentlich gegen diesen Punkt verstoßen wurde, hat dies die unbegrenzte Sperrung des Accounts zur Folge.




Zu deiner Lösung:


Yaslaw hat gesagt.:


> phpmaydmin kannst du für komplexere Sachen eh vergessen. Ich habe noch nicht festgestellt wie man dort sauber eine Session abarbeiten kann. Ich teste mit HeidiSql.
> Und beim PHP-Script kommt es halt drauf an wie du es anwendest. Dort würde ich das SQL eh mit PHP zusammensetzen und nicht mit SQL.


----------

