Datenbankeinträge nicht chronologisch

Dieses Thema im Forum "Web-Programmierung" wurde erstellt von VanNostren, 02.09.2006.

  1. VanNostren

    VanNostren Thread Starter MacUser Mitglied

    Beiträge:
    69
    Zustimmungen:
    1
    MacUser seit:
    03.07.2005
    Hallo!
    ich hoffe es kann mir jemand helfen, sonst platz ich...
    nun denn, ich habe ein script im internet gefunden, dass genau passend für mich ist. es ist ein news-system. in einer php benutzeroberfläche kann man neue news erstellen, diese werden dann in meiner mysql-datenbank gespeichert. außerdem erstellt das system eine php datei die vortäuscht eine xml datei zu sein, aus dieser liest meine flash-anwendung die informationen aus. leider passiert es dauernd, dass neue news einträge eben nicht "ganz unten" gespeichert werden, sondern mitten in der datenbank. das heißt, wenn man die seite aufruft, sieht man nicht die aktuellsten news. ich versteh nicht warum. hier das php script das die einträge in die datenbank speichert:

    //ADD NEWS ENTRY
    if($mode != '' && $action === 'add_news'){

    //Did they fill in everything?
    if($author != '' && $title != '' && $body != ''){

    //YES

    $query = "INSERT INTO spielberichteerste (author, title, body, timestamp)
    VALUES('" . $author . "', '" . $title . "', '" . $body . "', '" . time() . "')";

    if(mysql_query($query)){

    echo '<p style="text-align:middle;">Neuer Bericht gespeichert!</p>';

    }else{

    echo 'Problem Executing Query' . mysql_error();

    }

    }else{

    //NO
    echo 'Bitte alle Felder ausfüllen!';

    }

    falls nicht klar geworden ist was mein problem ist, bitte melden, dann versuche ich es besser auszudrücken....
     
  2. 2nd

    2nd MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    MacUser seit:
    25.07.2004
    Wie die Newseinträge gespeichert werden und wie sie im phpmyadmin in der Datenbank angezeigt werden ist humpe, solange sie ein Attribut haben, mit dem man die beim Auslesen sortieren kann (was auch phpmyadmin nach verschiedene Kriterien darstellen kann, wenn Du das benutzt).

    Das Script speichert per timestamp Attribut, so sollte auch der Select-Query in der Lage sein durch ein "...ORDER BY timestamp ASC (oder DESC)" die News chronologisch aus der DB auszulesen.

    Kannst Du mal den Select-Query posten?

    2nd
     
  3. SilverShadow

    SilverShadow MacUser Mitglied

    Beiträge:
    311
    Zustimmungen:
    8
    MacUser seit:
    23.09.2005
    Naja, wenn Du nen Datensatz in der mitte irgendwo löscht, mit dem Keyattribut(swert) XY, wird dieser auch irgendwann wieder für einen neuen Datensatz benutzt und die chronologische Sortierung ist dahin...
     
  4. ThaHammer

    ThaHammer MacUser Mitglied

    Beiträge:
    3.276
    Zustimmungen:
    13
    MacUser seit:
    01.06.2004
    Macht nichts weil er den Timestamp hat. Ich habe statt des Timestamp DateTime benutzt.
     
  5. 2nd

    2nd MacUser Mitglied

    Beiträge:
    8.902
    Zustimmungen:
    242
    MacUser seit:
    25.07.2004
    Ich kann Dir nicht ganz folgen? Ob ein schon "benutzter" und gelöschter Primary Key wieder genommen wird, funktioniert doch, solange er nur einmal vorkommt.

    Und "in der Mitte" bei einer Datenbank ist relativ, abhängig davon wie ich sortiere (z. B. nach Namen oder Timestamp). Wie die Tupel in der Datenbank liegen ist doch egal, solange sie Attribute haben, mit denen ich sie sortiert da raus bekommen kann ;)

    Oder was meinst Du mit der "Mitte" der DB?

    2nd
     
  6. SilverShadow

    SilverShadow MacUser Mitglied

    Beiträge:
    311
    Zustimmungen:
    8
    MacUser seit:
    23.09.2005
    Ja ok, "in der Mitte" ist etwas dumm ausgedrückt.
    Ich bin davon ausgegangen, dass er Post-Author gemeint hat, wenn er Datensätze von 1-10 einspielt, dass die auch in der Reihenfolge 1-10 rauskommen. Tun sie auch. Aber wenn er z.b. den 4. löscht, steht nun plötzlich 11 an dieser "stelle".
    Ein Order by ist daher immer Pflicht..
     
  7. VanNostren

    VanNostren Thread Starter MacUser Mitglied

    Beiträge:
    69
    Zustimmungen:
    1
    MacUser seit:
    03.07.2005
    danke für eure antworten.

    dies hier ist die php datei, die die datenbank ausliest und dann als xml ausspuckt:

    <?php
    #***********************************
    # XML OUTPUT
    #***********************************


    include('admin/functions.php');
    connect('hier stehen meine verbindungsdaten');
    $query = 'SELECT id, author, title, body, FROM_UNIXTIME(timestamp, \'%d.%m.%Y\') date
    FROM spielberichteerste
    LIMIT 20';

    $result = mysql_query($query);


    $nl = "\r\n";

    echo '<?xml version="1.0" encoding="ISO-8859-1"?>' . $nl;
    echo '<ROOT>' . $nl;

    while($r = mysql_fetch_array($result)){

    echo '<news id="' . $r['id'] . '" title="' . stripslashes2($r['title']) . '" date="' . $r['date'] . '" author="' . stripslashes2($r['author']) . '">' . $nl;
    echo '<body><![CDATA[' . stripslashes2($r['body']) . ']]></body>' . $nl;
    echo '</news>' . $nl;


    }

    echo '</ROOT>' . $nl;

    ?>

    am liebsten wär mir aber wenn immer wenn man einen neuen eintrag schreibt, der auch ans ende der tabelle gespeichert wird, damit alles auch in dem admin bereich sortiert ist und nicht nur auf der webseite auf der die einträge dann auftauchen...
     
  8. master_p

    master_p MacUser Mitglied

    Beiträge:
    1.065
    Zustimmungen:
    23
    MacUser seit:
    31.01.2005
    phpMyAdmin zeigt die Daten so an, wie sie im Dateisystem stehen. Wie SilverShadow schon gesagt hat, überschreibt die Datenbank "Lücken", damit nicht zuviel Speicherplatz verschwendet wird.

    @VanNostren:
    Du solltest mal posten, wie das ganze angezeigt wird. Es ist nämlich nicht ein Problem der Speicherung, sondern ein Problem der Ausgabe.
     
  9. mores

    mores MacUser Mitglied

    Beiträge:
    3.575
    Zustimmungen:
    106
    MacUser seit:
    23.12.2003
    JEDER neuer eintrag in der datenbank wird an's ende gestellt, sofern du die ID auf "auto increment" gestellt hast (oder so)

    die ID des eintrages geht weiter nach oben, also nach eintrag 186 kommt eintrag 187.

    kann zwar irgendwo drinnen stehen (lücken), aber wenn du nach der ID sortierst, ist alles chronologisch.

    ich sortier meine inhalte meist nach der ID, wenn es um chronologie geht.

    du musst nur diese zeile ausbessern:

    Code:
    $query = 'SELECT id, author, title, body, FROM_UNIXTIME(timestamp, \'%d.%m.%Y\') date [b]ORDER BY id DESC[/b]
    dann gehst du in der DB rückwärts, also das neueste ist als erstes dran, danach das zweit-neueste, dann das drittneueste usw. usf.
     
  10. VanNostren

    VanNostren Thread Starter MacUser Mitglied

    Beiträge:
    69
    Zustimmungen:
    1
    MacUser seit:
    03.07.2005
    Nachtrag:

    auch im admin bereich wird ja die datenbank ausgelesen um sie anzeigen zu können undzwar so:


    //LIST ALL NEWS ENTRIES FOR US TO VIEW
    $query = 'SELECT id, title , FROM_UNIXTIME(timestamp, \'%d.%m.%Y \') date FROM spielberichteerste';
    $result = mysql_query($query);


    echo '<table style="margin: 0 auto;width:500px;border: 1px dotted #E5E5E5;" cellpadding="5" cellspacing="1">
    <tr>
    <th>Überschrift</th><th>Datum</th><th>Bearbeiten</th><th>Löschen</th>';

    while($r = mysql_fetch_array($result)){

    //Swap our CSS classes
    $bg = 'light' ? 'light' : 'dark';

    echo '

    <tr class="' . $bg . '"><td><strong>' . stripslashes2($r['title']) . '</strong></td>
    <td>' . $r['date'] . '</td>
    <td><a href="admin.php?mode=edit&id=' . $r['id'] . '">Edit</a></td>
    <td><a href="admin.php?mode=delete&id=' . $r['id'] .'">Delete</a></td></tr>';


    wie muss ich jetzt dieses ORDER benutzen um zu sortieren?
     
Die Seite wird geladen...
Ähnliche Themen - Datenbankeinträge chronologisch
  1. Saugkraft
    Antworten:
    14
    Aufrufe:
    1.631

Diese Seite empfehlen