[FRAGE] - sql problem
Results 1 to 9 of 9

Thread: sql problem

  1. #1
    nix_is's Avatar
    Title
    Master
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    157
    Thanks
    0
    Thanked 0 Times in 0 Posts

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

  2. #2
    RoadRash's Avatar
    Title
    Elite
    Join Date
    Jan 2002
    Location
    Oberwart / Wien
    Posts
    274
    Thanks
    0
    Thanked 0 Times in 0 Posts
    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.

  3. #3

    Title
    Principal
    Join Date
    Mar 2002
    Posts
    65
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Spass mit mySQL

    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?
    Last edited by slayven; 24-04-2002 at 01:31.

  4. #4

    Title
    Veteran
    Join Date
    Feb 2002
    Posts
    22
    Thanks
    0
    Thanked 0 Times in 0 Posts
    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

  5. #5
    nix_is's Avatar
    Title
    Master
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    157
    Thanks
    0
    Thanked 0 Times in 0 Posts
    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...

  6. #6
    nix_is's Avatar
    Title
    Master
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    157
    Thanks
    0
    Thanked 0 Times in 0 Posts
    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 Code:
    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...

  7. #7
    catwoman's Avatar
    Title
    Hero
    Join Date
    Feb 2002
    Posts
    242
    Thanks
    0
    Thanked 0 Times in 0 Posts

    sql

    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
    der unterschied zw. reifen & politikern ist, daß reifen ein mindestprofil brauchen.

  8. #8
    nix_is's Avatar
    Title
    Master
    Join Date
    Feb 2002
    Location
    Vienna
    Posts
    157
    Thanks
    0
    Thanked 0 Times in 0 Posts
    @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...

  9. #9
    catwoman's Avatar
    Title
    Hero
    Join Date
    Feb 2002
    Posts
    242
    Thanks
    0
    Thanked 0 Times in 0 Posts
    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
    der unterschied zw. reifen & politikern ist, daß reifen ein mindestprofil brauchen.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •