[MySQL 4.1] Datensatz nicht am "Ende", sondern mittendrin .. !?

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

  • [MySQL 4.1] Datensatz nicht am "Ende", sondern mittendrin .. !?

    Also folgendes Prob: Ich habe eine Tablelle in der News stehen. Man kann über Formular neue News reinschreiben (funzt), anschließend werden die "aktualiesierten" News ausgegeben (funzt).

    Nun hab ich ein Script eingebaut mit dem ich News löschen kann (funzt). Die anschließende Ausgabe geht auch wunderbar .. aber wenn ich dann wieder eine News poste, erscheint sie nicht am "Ende", sondern an der Stelle, wo ich vorher die News gelöscht hab.


    News add Script
    PHP-Code:
    <?php

    $db
    =mysql_connect("localhost","root","");
    mysql_select_db("main_db");
    $anfrage="SELECT * FROM News";
    $ergebnis=mysql_query($anfrage);
    $rows=mysql_num_rows($ergebnis);
    mysql_data_seek($ergebnis,$rows);

    if (isset(
    $_POST["senden"])) {

    function 
    daten_reiniger($inhalt) {
        if (!empty(
    $inhalt)) {
            
    $inhalt strip_tags($inhalt);
            
    $inhalt htmlspecialchars($inhalt);
            
    $inhalt trim($inhalt);
            
    $inhalt stripslashes($inhalt);
        }
        return 
    $inhalt;
    }
    foreach (
    $_POST as $key=>$element) {
        ${
    "n_".$key} = daten_reiniger($element);
    }

    $n_news_text2=nl2br($n_news_text);

    $anfrage="INSERT INTO News VALUES
        ('','
    $n_news_titel','$n_news_text2','$n_news_user')";

    mysql_query($anfrage) or die(mysql_error());
    }
        
    mysql_close($db);
    include 
    'a_news.php';
    ?>
    News löschen Script
    PHP-Code:
    <?php
    $db
    =mysql_connect("localhost","root","");
    mysql_select_db("main_db");

    $anfrage="DELETE FROM News WHERE ID='$news_id'";
    mysql_query($anfrage) or die(mysql_error());

    ?>
    Die News Tabelle hat eine ID Spalte (mit AUTO INCREMENT und ist auch PRIMARY KEY..). Hab schon versucht über mysql_data_seek ans "Ende" der Tabelle zu gelangen, damit er die News dahin setzt, aber Fehlanzeige. Das Script nimmt immer den "freigewordenen" Platz.

    Die Variable $news_id bekommt ihren Wert über einen Link mit delete.php?news_id=...

    Wahrscheinlich ist es banal, aber ich schnalls einfach nicht.

    Danke an euch, die ihr euch Tag für Tag mit uns Dummis abgebt

  • #2
    Re: [MySQL 4.1] Datensatz nicht am &quot;Ende&quot;, sondern mittendrin .. !?

    Original geschrieben von hannes-n
    Das Script nimmt immer den "freigewordenen" Platz.
    Will heißen, es bekommt die ID des gelöschten Eintrags?

    Wie liest du die Daten aus um sie anzuzeigen?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      nein. es bekommt eine fotlaufende id .. also nach 16 kommt dann auch 17, wenn ich 8 gelöscht hab. aber 17 steht an der stelle von 8 ..

      aber mir ist heute morgen eingefallen, dass ich nicht nach id's auslese .. was aber durchaus sinnvoll wär, um dieses problem zu beheben

      komisch find ich das trotzdem :/ dass er neue datensätze in "freie" plätze einfügt ..

      (altes) script zum auslesen ..
      PHP-Code:
          for($i=$anz-1;$i>-1;$i--) {
              
      mysql_data_seek($ergebnis,$i);
              
      $news=mysql_fetch_row($ergebnis);
                      echo 
      " bla bla bla .."

      Kommentar


      • #4
        Original geschrieben von hannes-n
        komisch find ich das trotzdem :/ dass er neue datensätze in "freie" plätze einfügt ..
        Das ist nicht nur bei MySQL so, sondern bei jeder Gelegenheit, an der freie Speicherplätze (slack space; Überhang) entstehen:
        Im Dateisystem, bei der String- und sonstigen RAM-Verwaltung in PHP und anderen Interpretersprachen - und eben in Datenbanken.
        Die Methode, das ganze aufzuräumen (d.h. alle benutzten Speicherbereiche hintereinander zu hängen), heißt "garbage collection" (bei der Speicherverwaltung), "Defragmentieren" (im Dateisystem) oder "Optimierung" (in MySQL).
        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


        • #5
          ok, ok .. das läuft darauf hinaus, das ich bei jedem löschen alle datensätze auslese, zwischenspeicher, die tabelle entleere, und die datensätze in neuer reihenfolge wieder hineinsetze?

          es reicht doch aber sicherlich auch aus, wenn ich einmal im monat so eine aktion mache, oder? ich meine mein pc defragmentiert sich ja auch nicht bei jeder dateiverschiebung

          danke

          Kommentar


          • #6
            Sortiere doch die Ausgabe!

            ORDER BY id ASC
            chansel0049
            ----------------------------------------------------
            if you've reached the bottomline - dig further!
            Übersetzer gesucht? http://www.babelport.com

            Kommentar


            • #7
              ja, das hab ich schon gemacht .. funzt auch. will es dann sowieso auf sortierung nach datum umstellen ..

              meine frage ist jetzt nur noch, ob es sinnvoll ist die news tabelle zu optimieren, bei ca. 20 beiträgen pro monat. oder macht es nischt??

              Kommentar


              • #8
                d.h. 240 p.a. , dann kannst du frühestens alle 5 Jahre einmal optimize table aufrufen, früher lohnt sich nicht.

                Kommentar


                • #9
                  Hi,

                  wie wäre ein:
                  ALTER TABLE `News` ORDER BY `id`

                  Gruß Offe

                  Kommentar


                  • #10
                    Ok, alle fünf Jahre .. ich glaub dann lass ich das

                    Nur zum Verständnis:
                    Original geschrieben von Offe1
                    ALTER TABLE `News` ORDER BY `id`
                    ALTER TABLE ändert die Struktur der Tabelle, soweit klar, ich dachte bloß immer, man kann damit nur Spalten hinzufügen und wegnemhen etc .. Klingt an sich echt gut und logisch , danke office1!

                    Damit hat sich dieses thema dann wohl endgültig erledigt, es sei denn jmd hat funktionelle einwände gegen die Optimierung per ALTER TABLE ..

                    Danke an alle nochmal. Aber ich werd ich bestimmt noch öfters nerven

                    Kommentar

                    Lädt...
                    X