Neuen index an beliebiger stelle in mysql tabelle

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Neuen index an beliebiger stelle in mysql tabelle

    Hi Leute
    Ich habe da ein kleines Problemchen

    Ich habe eine Mysql tabelle (Preisliste), nach indexes sortiert und ich möchte nun, dass wenn man per formular einen neuen Eintrag einfügt diesen an beliebiger stelle einfügen kann. Da mir nix besseres eingefallen ist und es nicht viele Einträge sind (max 10-15) habe ich mir gedacht ich erhöhe einfach bei einem neuen eintrag alle nachfolgenden indexes um 1.

    Hab dafür folgendes geschrieben, was nicht funktionieren will:

    PHP-Code:

    // Selektiert den höchsten werd in der Datenbanktabelle
    $result mysql_query("SELECT MAX(ID) FROM ".$type."",$db); 
    $result mysql_fetch_row($result);
    $result $result[0]; //liest den Array aus

    //DIESE FUNKTION FUNKT NICHT *GRML*
    for($x=$idnr;$x<$result;$x++) {
    mysql_query("UPDATE ".$type." SET ID='$idnr++' WHERE ID=$idnr",$db)
    or die (
    mysql_error());

    die variable $idnr (=index) wurde mittels post weitergegeben ist also vorhanden
    der maximale wert wird ausgelesen, die forschleife wird auch anweisungsgemäß durchlaufen aber die mysql_query funktion funktioniert nicht, die tabelle verändert sich überhaupt nicht, es wird aber auch kein mysql_error ausgespuckt.

    Kann mir da vielleicht irgendwer weiterhelfen und mir sagen was ich falsch mache bzw mir tipps für eine andere lösung des problems geben?

    achja, sry wenn das vl manchmal etwas umständlich geschrieben ist, bin noch nicht so erfahren mit php & mysql
    Zuletzt geändert von TobiaZ; 08.01.2005, 17:12.
    ~~Never drive faster than your Guardian Angel can fly~~

  • #2
    Re: Neuen index an beliebiger stelle in mysql tabelle

    eine ID sollte immer nur eines tun: den datensatz eindeutig identifizieren.
    zum sortieren etc. sollte sie nie missbraucht werden.

    wenn du ein solches sortierkriterium brauchst, nutze eine zusätzliche spalte dafür, in die du dann werte deiner wahl einträgst, mit denen sich die gewünschte sortierung erstellen lässt.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      gut...dann mach ich ne neue spalte zb "reihung"
      und vergebe dort auch werte von 1-10

      aber das ändert nichts daran dass die schleife nicht korrekt funktioniert....oder?
      ~~Never drive faster than your Guardian Angel can fly~~

      Kommentar


      • #4
        habe jetzt ne neue spalte "reihenfolge" erstellt, aber wie erwartet geht es immer noch nicht (hätte sein können dass es am auto_increment liegt, ist aber nicht so)

        gibts denn niemand der mir irgendwelche lösungsvorschläge geben kann?
        ~~Never drive faster than your Guardian Angel can fly~~

        Kommentar


        • #5
          Ist diese neue Spalte UNIQUE oder auto_increment? Beim Durchlaufen der Schleife entstehen ja temporär doppelt vorkommende Zahlen. Als Beispiel:

          Aus 1, 2, 3 wird beim Einfügen an der zweite Stelle 1, 2, 3, 3 und dann erst 1, 2, 3, 4

          Vielleicht solltest Du bei der größten Zahl beginnen mit dem Erhöhen des Wertes und die Schleife "rückwärts" laufen lassen.

          Und hast Du mal versucht $idnr++ vielleicht mal vor der query zu deklarieren, also so:

          $idnr_temp = $idnr + 1;

          oder vielleicht mal einen konkreten Wert eingeben.

          hmmm... Vielleicht hilft Dir ja eine Idee, sag bescheid
          Software- und Webapplikationen

          Kommentar


          • #6
            also am anfang war es auto_increment aber jetzt wo ich die eigene spalte "reihenfolge" habe ist es weder unique noch auto_increment (außerdem würde ja dann ne mysql fehlermeldung kommen)

            werde deine vorschläge mal ausprobieren.....


            bin aber immer noch offen für weiter vorschläge
            ~~Never drive faster than your Guardian Angel can fly~~

            Kommentar


            • #7
              kannst du mir verraten, was du überhaupt mit einer schleife willst, wenn du bei allen einträgen von x bis max den wert um eins erhöhen willst?

              warum nimmst du dann nicht ein UPDATE-statement mit geeigneter WHERE-klausel dazu?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                jetzt gehts, habs (von alleine *G*) wirklcih mit ner while funktion gemacht, anders dürfte es wohl wirklcih nicht gehen

                und die mysql funktion is nicht gegangen weil offensichtlich in ner query abfrage kein $idnr++ stehen darf (danke an ray-D)

                jetzt siehts so aus und funktioniert:


                PHP-Code:
                Selektiert den höchsten werd in der Datenbanktabelle
                $result 
                mysql_query("SELECT MAX(reihenfolge) FROM ".$type."",$db); /
                $result mysql_fetch_row($result);
                $result $result[0]; //liest den Array aus

                //DIESE FUNKTION FUNKT JETZT

                $idnr_temp $idnr 1;
                $result $result $idnr;


                while(
                $idnr<=$result) {
                mysql_query("UPDATE ".$type." SET reihenfolge='$idnr_temp' WHERE ID=$idnr",$db)
                or die (
                mysql_error());
                $idnr++;
                $idnr_temp++;

                Zuletzt geändert von TobiaZ; 08.01.2005, 17:12.
                ~~Never drive faster than your Guardian Angel can fly~~

                Kommentar


                • #9
                  und irgendwann wirst du es hoffentlich auch von alleine schaffen deinen code umzubrechen.

                  Kommentar


                  • #10
                    Original geschrieben von Elotrohombre
                    jetzt gehts, habs (von alleine *G*) wirklcih mit ner while funktion gemacht, anders dürfte es wohl wirklcih nicht gehen
                    bezweifle ich.

                    und die mysql funktion is nicht gegangen weil offensichtlich in ner query abfrage kein $idnr++ stehen darf
                    wert++ ist auch nur eine andere schreibweise für wert = wert + 1.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      ach gott, bist du negativ


                      dass wert++ dasselbe ist wie wert + 1 ist mir auch klar, aber innerhalb ner mysql_query darf man (das schließe ich daraus dass es vorher nicht gegangen ist und jetzt schon) nur die variable selber hineinschreiben


                      und das mit while, for .... kannst gerne was präsentieren wies mit for geht, ich habs nicht geschafft, aber ich kenn mich ja auch nicht gut aus


                      bin froh dass es soweit mal funktioniert......
                      ~~Never drive faster than your Guardian Angel can fly~~

                      Kommentar


                      • #12
                        kannst gerne was präsentieren wies mit for geht
                        sicher nicht viel anders... ... nur schöner.

                        Kommentar

                        Lädt...
                        X