kniffelig ?

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

  • kniffelig ?

    Guten Morgen,

    jetzt habe ich mal wieder eine feine Aufgabe.

    gegeben ist eine Tabelle mit unbekannt vielen Einträgen in der Form

    Code:
    nr       antr     ...
    1         1
    1         2
    1         4
    2         3
    2         4
    3         1
    4         5
    wobei nr und antr zusammen den PRIMARY KEY bilden.
    Wie kann ich nun effizient eine Spalte antr2 füllen, in welche
    die Nummern hochzählen und pro nr mit 1 anfangen. Also die antr
    Nummern alle nachrutschen

    Code:
    nr       antr     ...     antr2
    1         1                1
    1         2                2
    1         4                3
    2         3                1
    2         4                2
    3         1                1
    4         5                1
    Die Reihenfolge aus antr muß dabei erhalten bleiben.
    Auf nr / antr2 liegt dann auch wieder ein unique key
    TBT

    Die zwei wichtigsten Regeln für eine berufliche Karriere:
    1. Verrate niemals alles was du weißt!


    PHP 2 AllPatrizier II Browsergame

  • #2
    Re: kniffelig ?

    da du es unter PHP gepostet hast, nehme ich an, du suchst auch nach einer PHP-lösung ...


    sieht doch gar nicht so schwer aus.
    alles auslesen und nach nr und antr sortieren lassen.

    dann in einer schleife über die datensätze gehen, und dabei einen gruppenwechsel auf nr implementieren.

    zähler mitlaufen lassen und zeilen updaten, mit antr2 = zähler.
    und wenn der gruppenwechsel stattfindet, also nr einen neuen wert bekommt, dann halt den zähler wieder zurücksetzen ...
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ich habe es unter PHP gepostet, da ich für SQL keine Idee hätte.
      Durchlaufen und mitzählen ist schon ok, wird aber mächtig auf DB rumhämmern,
      besonders wenn da mal mehr als nur 50 Einträge sind.
      TBT

      Die zwei wichtigsten Regeln für eine berufliche Karriere:
      1. Verrate niemals alles was du weißt!


      PHP 2 AllPatrizier II Browsergame

      Kommentar


      • #4
        kann dein DBMS mit Sub-Select umgehen? Wenn ja dann überlege ich mir was

        Kommentar


        • #5
          MySQL 3.x --- also nix mit Subselects
          TBT

          Die zwei wichtigsten Regeln für eine berufliche Karriere:
          1. Verrate niemals alles was du weißt!


          PHP 2 AllPatrizier II Browsergame

          Kommentar


          • #6
            du könntest die zuordnung einmalig per php machen (quasi als basiskonfiguration) ... bei jedem insert/update prüfst du dann, wohin der datensatz soll und positionierst die anderen drumherum.
            Kissolino.com

            Kommentar


            • #7
              wird nix, da dies eine temporäre Tabelle für Exporte ist.
              Dh. die tabelle wird mit bestimmten Daten gefüllt, und dann werden
              auf Grundlage dieser Tabelle andere Daten exportiert.

              habs erstmal so gemacht:

              PHP-Code:
              function repair_antr(){
                  
              $this->db->select('    SELECT bewnr, antrnr
                                      FROM export_bewnr
                                      GROUP BY bewnr, antrnr
                                      ORDER BY bewnr ASC, antrnr ASC'
              ,'repair');
                  if( 
              $this->db->rows('repair') ){
                      
              $bewnr 0;
                      
              $antrnr 0;
                      while( 
              $row $this->db->fetch('repair') ){
                          if( 
              $row['bewnr'] != $bewnr ){
                              
              $bewnr $row['bewnr'];
                              
              $antrnr 1;
                          }else{
                              ++
              $antrnr;
                          }
                          
              $this->db->query('    UPDATE export_bewnr
                                              SET antrnr2 = '
              .$antrnr.'
                                              WHERE bewnr = '
              .$bewnr.'
                                                  AND antrnr = '
              .$row['antrnr']);
                      }
                      
              $this->db->free('repair');
                  }

              TBT

              Die zwei wichtigsten Regeln für eine berufliche Karriere:
              1. Verrate niemals alles was du weißt!


              PHP 2 AllPatrizier II Browsergame

              Kommentar


              • #8
                wie wär´s denn damit?
                PHP-Code:
                $bewnr = (int)...;

                list(
                $antr$antr2) = mysql_fetch_row(mysql_query("select max(antr), max(antr2) from export_bewnr where nr=$bewnr"));
                $antr = (int)$antr;
                $antr2 = (int)$antr2;
                do
                {
                  
                $antr++; $antr2++;
                  
                mysql_query("insert into export_bewnr (nr, antr, antr2, wert)
                   values (
                $bewnr$antr$antr2, '$wert')");
                } while (
                ereg('^Duplicate entry'mysql_errno())); 
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar

                Lädt...
                X