sql problem

  • hi leutz,
    folgendes problem:
    hab eine tabelle (relation.. datmod lässt grüßen *g*) mit viiiiiieeeeelllen einträgen...
    jetz hab ich eine neue spalte hinzugefügt..
    alles schön und gut
    und jetz will ich die neue spalte mit integer-werten von 0 bis n auffüllen.. hab da schon die kuriosesten sachen probiert, aber das haut ned so richtig hin.. is sicherlich ganz leicht, aber ich steh auf der leitung.. kann mir mal wer weiterhelfen bitte?
    (das ganze läuft übrigens auf mySQL, also nicht zu abstrakt werden.. kennt vieles nicht)

    mein versuch mit
    update tabelle1 set spalte1 = spalte1 + 1
    ergibt leider nur einser überall
    und die maximum funktion kennt mysql anscheinend nicht..
    oda ich bin zu dumm...

    danke für irgendeine hilfe

    Give a man a fish and he'll eat it for the day.
    Teach him how to fish and he will eat for the rest of his life...

  • du kriegst deswegen immer nur einser, weil bei die abarbeitung des sql-statements zeilenweise erfolgt und bei jeder zeile ist der aktuelle wert von spalte1 = 0 und 0+1=1.

    wenn ich dich richtig verstehe, möchtest du die datensätze aber "durchnumerieren"...

    soweit ich weiss (hab schon länger nix mehr mit mysql gemacht, deswegen weiß ich nicht, obs dort auch geht!) gibt es einen "zähler-datentyp" in sql.

    am besten wäre es, wenn du deine mysql-referenz bzw. das "biber-buch" (datenbank kompakt) befragst (eher die mysql-referenz), da mysql zB nicht alles aus dem SQL-Standard implementiert bzw. gewisse Dinge (und dazu zählen meiner Erfahrung nach gerade Aufzählungen) stark DB-System-abhängig sind.

    HTH,...

    Ceterum censeo, carthaginem esse delendam.

  • Schaut so aus, als ob du nachtraeglich eine eindeutige id haben willst.

    ALTER TABLE table ADD COLUMN column int NOT NULL auto_increment, ADD PRIMARY KEY (column);

    Geht leider nur, wenn du keine PRIMARY KEYs hast - sonst musst du sie vorher loeschen (
    ALTER TABLE table DROP PRIMARY KEY
    ) und anschliessend wieder setzen;

    HTH

    update wie war das mit den spitzen klammern?
    update2 nextes mal versuch ich den preview-button - ehrlich
    update3 warum gibts beim aendern keinen preview-button?

  • Gleich vorweg, 'ne große Hilfe werd' ich dir nicht sein. ;)

    Also wenn es sich dabei nicht um mySql handeln würde, wäre eine Stored Procedure wahrscheinlich am elegantesten. Die werden aber bei mySql (vorraussichtlich) erst in Version 4.1 unterstützt.

    Eine weitere Möglichkeit wäre, eine neue Tabelle anzulegen und dort eine Spalte mit nur einem Wert als Zähler zu missbrauchen. Wie (ob!) man das in mySql realisieren kann ist fraglich, da multi-table UPDATE (natürlich) erst ab Version 4.1 unterstützt werden!

    Die Idee mit dem Maximum ist auch gut, aber da man bei der Set-Anweisung der Update-Funktion keine weiteren Abfragen als "Werte" angeben kann, auch nicht praktikabel.

    Die von RoadRash vorgeschlagene Möglichkeit von auto_increment wäre auch nur suboptimal, da du dort bei 1 beginnen würdest (gut, das ist wahrscheinlich das kleinere übel). Des weiteren hab' ich aber beim ausprobieren eine sehr aufschlussreiche fehlermeldung zurück bekommen:
    "ERROR 1075: Incorrect table definition; There can only be one auto column and it must be defined as a key"
    also auch nicht wirklich praxistauglich. [Siehe auch Beitrag von slayven]

    Die einzige Möglichkeit, das in mySql zu realisieren scheint die Verwendung von externen Programmiersprachen zu sein... :(
    Oder kennt irgendwer einen (den) Trick und ist bereit, dieses Wissen mit uns zu teilen?

    Kein Wunder, daß wir in DatMod postgesql verwenden!

    greetings,
    ded

    PS: Eine Möglichkeit fällt mir noch ein, aber die ist schon _sehr_ krank und funktioniert erst ab mySql-Version 3.23.25. Man könnte es vielleicht durch eine neue Tabelle mit einem auto_increment Feld(Spalte) und der 2maligen Verwendung von Merge realisieren...

    PS 2: Die 2. von mir angesprochene Methode könnte doch funktionieren, da man multi-table UPDATE in mySQL 3.23 anscheinend irgendwie faken kann. Mehr dazu unter Comments hier. Ich bin jetzt aber echt zu müde, um das noch weiter zu verfolgen. Gute nacht!

    I'm a pessimist because of intelligence, but an optimist because of will. -- Antonio Gramsci

  • hm, ja das problem is dass ich nachträglich einen zweiten index für die reihenfolge der einträge einfügen muss...
    und mysql is echt ein dreck.. aber ich werd mich damit spielen und euch erfolge melden..
    soweit ein großes dankeschön!

    Give a man a fish and he'll eat it for the day.
    Teach him how to fish and he will eat for the rest of his life...

  • ok, ich habs jetz primitiv mit php gelöst.. i weiß, is ned schön, aber für einmal laufen lassen reichts... :)
    (setzt leider seq mit id gleich, aber das is wurscht)

    PHP
    for ($i=0; $i<1000; $i++)
    {
      $edit = mysql_query("update table1 set seq = $i where id = $i");
    }

    Give a man a fish and he'll eat it for the day.
    Teach him how to fish and he will eat for the rest of his life...

  • meiner meinung nach könnte/müßte auch funken:
    - tabelle in file unloaden
    - tabelle "drop"en bzw alle einträge löschen,
    - auto-inkrement-spalte dazu
    - aus dem file wieder alle zeilen in die tabelle "load"en (auto-inkrement-spalte brauchst nicht angeben, weil ja der wert automatisch vergeben wird).

    kommt halt drauf an, wieviele zeilen in der tabelle sind.

    grüße
    ines

    :catwoman: der unterschied zw. reifen & politikern ist, daß reifen ein mindestprofil brauchen.

  • catwoman
    du meinst ich soll alle einträge dann einzeln wieda reintun?
    dann kann ich ja gleich hergehen und die sequenzen händisch ändern.. das war ja das was ich umgehn wollte...

    aber da das gleichsetzen mit der id eh kein problem war passts.. hab nur übersehen dass ichs gleichsetzn auch kann..
    bei dem problem gehts ja um die reihenfolge der daten, d.h. ich will sie nachträglich ändern, und das kann ich mit der seq-spalte toll machen..

    trotzdem danke an alle

    Give a man a fish and he'll eat it for the day.
    Teach him how to fish and he will eat for the rest of his life...

  • Zitat

    Original geschrieben von nix_is
    catwoman
    du meinst ich soll alle einträge dann einzeln wieda reintun?

    natürlich nicht!!!
    load & unload funkt für ganze tabellen! dh. 1 x load/unload für 1 tabelle; 1 file mit inhalt der ganzen tabelle.

    grüße
    ines

    :catwoman: der unterschied zw. reifen & politikern ist, daß reifen ein mindestprofil brauchen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!