3 Stimmen

Erstellen Sie eine MySQL-Tabelle aus einer Liste von Begriffen in einer Textdatei.

Ich habe eine Textdatei mit einer langen Liste von Begriffen (ca. 800), alphabetisch sortiert im Format:

awort
bwort
cwort
...

Ich möchte diese Datei verwenden, um eine neue MySQL-Tabelle zu erstellen, in der jeder Begriff ein Feld ist, alle mit dem Attribut VARCHAR(5).

Es wäre am besten, wenn die Felder in der Reihenfolge eingefügt würden, in der sie in der Datei erscheinen, da ich diese Datei auch in Skripten für Inhaltsanalysen verwende und es einfacher wäre, die (alphabetische) Reihenfolge beizubehalten, wenn es darum geht, Daten in diese neue Tabelle einzufügen.

Für die Neugierigen: Ich bin eine Studentin, die an einem Projekt zur Geschichtswissenschaft arbeitet, das Content-Analysen beinhaltet. Die Felder werden zur Speicherung von Häufigkeitsdaten verwendet. Es wird ein weiteres Feld geben, das der Primärschlüssel ist und diese Felder mit anderen Daten verknüpft. Ich bin keine Programmiererin, habe aber 10 Jahre Erfahrung im Umgang mit Linux und kann normalerweise Dinge herausfinden. Aber Google hat mich hier im Stich gelassen.

EDIT

Also hat Damoviso darauf hingewiesen, dass ich die Datei eigentlich in einen mySQL-Befehl umwandeln musste. Ich habe awk und uniq verwendet, um folgendes zu generieren:

CREATE TABLE keyterms_frq (
    filename VARCHAR(20),
    apperception VARCHAR(5),
    behaviorism VARCHAR(5),
    behavioristic VARCHAR(5),
    behaviorists VARCHAR(5),
    behaviorist VARCHAR(5),
    behavior VARCHAR(5),
    behaviour VARCHAR(5),
    brain VARCHAR(5),
    conditioned VARCHAR(5),
    conditioning VARCHAR(5),
    condition VARCHAR(5),
    consciousness VARCHAR(5),
    conscious VARCHAR(5),
    experienced VARCHAR(5),
    experiences VARCHAR(5),
    experience VARCHAR(5),
    intellect VARCHAR(5),
    introspections VARCHAR(5),
    introspection VARCHAR(5),
    introspectively VARCHAR(5),
    introspective VARCHAR(5),
    intuition VARCHAR(5),
    memoryimage VARCHAR(5),
    memory VARCHAR(5),
    mentality VARCHAR(5),
    mentally VARCHAR(5),
    mental VARCHAR(5),
    mind VARCHAR(5),
    mirrorscript VARCHAR(5),
    mirrorwriting VARCHAR(5),
    unconditioned VARCHAR(5)
);  

Was leider immer noch nicht funktioniert, da es folgendes generiert:

FEHLER 1064 (42000): Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, um die richtige Syntax in der Nähe von 'condition VARCHAR(5), consciousness VARCHAR(5), conscious VARCHAR(5), experience' zu verwenden.

Zunächst dachte ich, dass es möglicherweise eine Begrenzung dafür gibt, wie viele Felder ich generieren kann, aber das scheint nicht das Problem zu sein.

2voto

Damovisa Punkte 18793

Persönlich (und ich weiß, dass dies wahrscheinlich nicht beliebt sein wird), aber ich neige dazu, Excel und etwas wie Textpad oder Notepad++ (oder sogar Vanilla-Notepad) für einmalige Datenbankeinsätze und Tabellenerstellungen wie diese zu verwenden.

Importieren Sie die Textdatei, damit jedes Wort in einer neuen Zeile steht, sortieren Sie sie wie erforderlich und erstellen Sie den SQL-Befehl darum herum, indem Sie Spalten und eine Zeile oben und unten einfügen.

In diesem Fall würde ich folgendes vorschlagen:

  1. Fügen Sie eine Zeile oben mit dem folgenden Inhalt in Zelle A1 ein:
    CREATE TABLE MyTable (Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  2. In jeder Zelle in Spalte B, die neben einem Wort steht, geben Sie den folgenden Inhalt ein:
    VARCHAR(5),
  3. Entfernen Sie das Komma für das letzte und setzen Sie ein ");" in die darunterliegende Zelle.
  4. Speichern Sie die Datei als tabulatorgetrennte Datei und ersetzen Sie dann mit dem Texteditor Ihrer Wahl Tabs durch Leerzeichen.

Sie werden eine SQL-Datei erhalten, die Sie gegen die Datenbank ausführen können.

Ja, es ist unordentlich und nicht sehr 1337, aber es ist effektiv.

0 Stimmen

Das klingt vielversprechend. Soll ich es dann als mySQL-Batch ausführen?

0 Stimmen

Auf jeden Fall - die Ausgabe sollte nur eine Textdatei mit einem SQL-Befehl zum Erstellen von Tabellen sein. Ich weiß nicht, welche Benutzeroberfläche Sie verwenden, um auf MySql zuzugreifen, aber ja, es klingt richtig, es als Batch auszuführen:) Lassen Sie mich wissen, wenn Sie mehr Hilfe benötigen!

0 Stimmen

Vielen Dank, dass du mich in die richtige Richtung gelenkt hast, um mein ursprüngliches Problem zu lösen. Ich habe schließlich Awk verwendet, um die MySQL-Elemente zu der Originaldaten hinzuzufügen und dann die Spalten zu verschieben.

2voto

Tristen Punkte 21

Hey Frank, ich habe das gerade auf deiner Facebook-Seite geschrieben, aber hier ist es noch einmal:

"condition" ist ein reserviertes Wort in MySQL, daher ist es nicht erlaubt, eine Spalte mit diesem Wort zu benennen. Überprüfen Sie die Liste hier (zumindest für MySQL 5.1):

http://dev.mysql.com/doc/refman/5.1/de/reserved-words.html

0 Stimmen

+1: Die Abfrage funktioniert für mich, wenn ich die Spalte 'condition' umbenenne.

1voto

wakingrufus Punkte 350

Also im Grunde genommen denke ich, dass du nach Folgendem fragst: Die Datei in ein Programm einlesen.
Lass das Programm jede Zeile nehmen und einen String generieren, der alle Wörter auflistet.
Füge einen CREATE TABLE Befehl mit deinem String zusammen, der deine Feldnamen enthält, um den SQL Befehl zu erstellen.
Sende diesen SQL Befehl an deinen SQL Server.
Ich bin immer noch zu neu darin, um dir eine gute Implementierung dieser Idee zu geben, aber hoffentlich, wenn dies dem entspricht, wonach du suchst, werde ich jemandem eine Idee geben.

0voto

Cᴏʀʏ Punkte 101076

Ich bin mir nicht sicher, ob ich ganz verstehe, worum es in deiner Frage geht, aber ich habe einen Gedanken:

Wenn du Frequenzdaten berechnen möchtest, könntest du effizientere Inhaltsanalysalgorithmen schreiben, wenn die Wörter sortiert wären, bevor sie in die Tabelle eingefügt werden. Dadurch würde die CPU-Belastung auf dem Datenbankserver verringert und dein Frequenzrechner wäre auch effizienter.

Vielleicht könntest du deine Frage etwas genauer ausführen?

0 Stimmen

Ich habe es neu bearbeitet und hoffentlich ist es jetzt etwas klarer. Die Wörter sind in alphabetischer Reihenfolge sortiert, wenn das ist, was du meinst. Danke.

0voto

Puppy Punkte 1

Der Weg, wie dies funktioniert, ist, indem die Datei in die Datenbank geladen wird, indem "load data infile" verwendet wird. Ersetzen Sie alle Variablen, die ich mit einem x versehen habe

mysql -uxuser -pxpass xdatabase -e "LOAD DATA INFILE '/tmp/xwordlist.cvs' INTO TABLE xtable FIELDS TERMINATED BY ',' (xcolname)"

0 Stimmen

Der Autor wollte eine Tabelle mit benannten Spalten erstellen. Ihre Lösung dient dem Importieren vorhandener Daten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X