Avatar billede webweaver Praktikant
18. oktober 2006 - 15:48 Der er 15 kommentarer og
1 løsning

Opdatering af database/Sletning i database

Hej profs.

Jeg har en log, som registrerer de sidste 50 steder en profil i mit community har været på sitet. Det er så meningen at når den når de 50 rækker i databasen, så skal den automatisk slette/opdatere den ældste række, så der bliver plads til den nye. Jeg kan sku bare ikke få den til det.

Så hvordan ville I lave det hvis det skulle laves?
Det burde jo være simpelt nok.

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede coderdk Praktikant
18. oktober 2006 - 16:01 #1
Såfremt du har en auto_increment'et id-kolonne, kan du prøve:

$sql = "SELECT id FROM tabel ORDER BY id LIMIT 50,1";
$qh = mysql_query( $sql ) or die( mysql_error() );
if ( $row = mysql_fetch_assoc( $qh ) )
{
  $sql = "SELECT * FROM tabel WHERE id < $row[id]";
  $qh = mysql_query( $sql ) or die( mysql_error() );
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
      echo "<pre>"; var_dump( $row ); echo "</pre>";
  }
}

Den skriver bare de rækker ud, som den ville slette. Ser det korrekt ud kan du erstatte:

  $sql = "SELECT * FROM tabel WHERE id < $row[id]";
  $qh = mysql_query( $sql ) or die( mysql_error() );
  while ( $row = mysql_fetch_assoc( $qh ) )
  {
      echo "<pre>"; var_dump( $row ); echo "</pre>";
  }

med:

  $sql = "DELETE FROM tabel WHERE id < $row[id]";
  mysql_query( $sql ) or die( mysql_error() );

Det ville dog være bedst at sortere efter et (unix-/)timestamp i stedet for ID'en...
Avatar billede webweaver Praktikant
18. oktober 2006 - 17:26 #2
Ja jeg kan ikke benytte mig af id, da databasen gemmer log fra alle profilerne i samme tabel.. Men jeg kan jo så benytte mig af noget datetime eller timestamp måske. Eller lave en anden id, til hver profil og bruge den.

Jeg prøver lige at se på dit script.
Avatar billede webweaver Praktikant
18. oktober 2006 - 18:10 #3
Jeg har kigget på scriptet. Jeg kan umiddelbart ikke få det til at virke.
Det printer slet ikke noget ud på skærmen?

På forhånd tak :)
Avatar billede coderdk Praktikant
18. oktober 2006 - 20:15 #4
Hvordan ser scriptet ud?
Avatar billede webweaver Praktikant
18. oktober 2006 - 22:47 #5
Min fil ser sådan ud;
http://pastebin.dk/index.php?show=2237

Filen bliver så included i resten af sitet...
Avatar billede webweaver Praktikant
22. oktober 2006 - 18:33 #6
Ingen hjælp at hente her eller?
Avatar billede webweaver Praktikant
01. november 2006 - 11:13 #7
Hallo!?
Avatar billede coderdk Praktikant
01. november 2006 - 11:36 #8
:) scriptet findes ikke længere på pastebin.dk...
Avatar billede webweaver Praktikant
01. november 2006 - 12:56 #9
http://pastebin.dk/index.php?show=2291

Jeg har postet scriptet igen ... :)
Avatar billede coderdk Praktikant
01. november 2006 - 13:11 #10
Prøv at erstatte:

    $query = mysql_query("SELECT user_id FROM User_Log WHERE user_id = '$_SESSION[userid]'") or die(mysql_error());
    $count = mysql_num_rows($query);
   
    $ip = $_SERVER["REMOTE_ADDR"];
    $sti = $_SERVER["PHP_SELF"];
   
    if ($count < 5) {

        mysql_query("INSERT INTO User_Log (user_id, ip, dato, sti) VALUES ('$_SESSION[userid]','$ip',NOW(),'$sti')") or die(mysql_error());
       
    }
   
    if ($count == 5) {
   
        $query = mysql_query("SELECT id FROM User_Log ORDER BY id LIMIT 5, 1") or die(mysql_error());
       
        if ($data = mysql_fetch_assoc($query)) {
       
                $query = mysql_query("SELECT * FROM User_Log WHERE id < '$data[id]'") or die(mysql_error());
           
            while ($data = mysql_fetch_assoc($query)) {
           
               
                echo "<pre>"; var_dump($data); echo "</pre>";

           
            }
       
        }

    }



med:



    $query = mysql_query("SELECT user_id FROM User_Log WHERE user_id = '$_SESSION[userid]'") or die(mysql_error());
    $count = mysql_num_rows($query);
   
    $ip = $_SERVER["REMOTE_ADDR"];
    $sti = $_SERVER["PHP_SELF"];
    $sql = "INSERT INTO User_Log (user_id, ip, dato, sti) VALUES ('$_SESSION[userid]','$ip',NOW(),'$sti')";
    mysql_query($sql) or die(mysql_error());
   
    $sql = "SELECT id FROM User_Log WHERE user_id = '$_SESSION[userid]' ORDER BY id DESC LIMIT 6,1";
    $query = mysql_query($sql) or die(mysql_error());
    if ($data = mysql_fetch_assoc($query))
    {
        $sql = "SELECT * FROM User_Log WHERE user_id = '$_SESSION[userid] AND id < '$data[id]'";
        $query = mysql_query($sql) or die(mysql_error());
        while ($data = mysql_fetch_assoc($query))
        {
            echo "<pre>"; var_dump($data); echo "</pre>";
        }
    }
Avatar billede coderdk Praktikant
01. november 2006 - 13:12 #11
6,1 skulle faktisk være 5,1 :P
Avatar billede webweaver Praktikant
01. november 2006 - 23:15 #12
Hvis jeg benytter mig af scriptet du postede, så når den kommer over de 5 rækker i tabellen, kommer denne fejl frem;

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '2'' at line 1

På forhånd tak :)

Mvh. Lasse Jensen
Avatar billede webweaver Praktikant
01. november 2006 - 23:37 #13
Kan se det er linien,

$query = mysql_query("SELECT * FROM User_Log WHERE user_id = '$_SESSION[userid] AND id < '$id'") or die (mysql_error());

som driller.. Hvis man fjerner AND id < '$data[id]' er der ingen fejl længere?
Avatar billede coderdk Praktikant
02. november 2006 - 11:06 #14
Du manglede en '

$query = mysql_query("SELECT * FROM User_Log WHERE user_id = '$_SESSION[userid]' AND id < '$id'") or die (mysql_error());
Avatar billede webweaver Praktikant
02. november 2006 - 12:21 #15
Godt spottet :)

Det var det som var fejlen. Det er nu rettet, og det virker perfekt.
Mange tak for hjælpen. Smid et svar, og få dine point (:

Mvh. Lasse Jensen
Avatar billede coderdk Praktikant
02. november 2006 - 12:24 #16
Det var så lidt :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester