Alleen de laatste 500 rijen in tabel behouden.

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Patrick cos

patrick cos

10/06/2013 11:45:10
Quote Anchor link
Ik wil van een script alleen de laatste 500 rijen in de database behouden.
Rij 501 moet dus automatisch verwijderd worden uit de database, dit krijg ik niet voor elkaar.

Heeft iemand enig idee?
 
PHP hulp

PHP hulp

23/12/2024 02:28:25
 
- SanThe -

- SanThe -

10/06/2013 11:51:19
Quote Anchor link
LIMIT gebruiken.
Gewijzigd op 10/06/2013 11:52:03 door - SanThe -
 
Patrick cos

patrick cos

10/06/2013 11:53:44
Quote Anchor link
Mag je een limit ook bij een INSERT gebruiken?
 
Aad B

Aad B

10/06/2013 12:45:36
Quote Anchor link
bij elke insert het aangemaakte id opvragen en id's lager dan dat id min 500 deleten. Zie de php functie mysql_insert_id()
Gewijzigd op 10/06/2013 12:51:51 door Aad B
 
Patrick cos

patrick cos

10/06/2013 14:30:47
Quote Anchor link
hoe krijg ik dit in bijvoorbeeld mijn insert?
(tabelnaam is even als test)


$query = "
INSERT INTO tabel
(kolom1, kolom2, kolom2)
VALUES
('$kolom1', '$kolom2', '$kolom3')";
 
- Ariën  -
Beheerder

- Ariën -

10/06/2013 14:33:21
Quote Anchor link
Dat is al een INSERT...
Ik zou het dan wel zo doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$query
= "
INSERT INTO tabel
(kolom1, kolom2, kolom2)
VALUES
('"
.$kolom1."', '".$kolom2."', '".$kolom3."')";
?>
 
Erwin H

Erwin H

10/06/2013 15:15:48
Quote Anchor link
Ten eerste niet de check op welke weg moeten op id doen, want als er eens eentje tussenuit gehaald wordt klopt het al niet meer. Daarnaast zal je auto_increment weer bij 1 beginnen op het moment dat je aan de limiet van je data type zit en zit je dus ook alweer met een probleem. Veel beter is om een veld 'create_date' of iets dergelijks bij te houden. Dat zet je op een TIMESTAMP type en aan de hand daarvan kan je bepalen welke rijen behouden moeten worden:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
SELECT id, create_date
FROM tabel
ORDER BY create_date DESC
LIMIT 499, 1

DELETE FROM tabel
WHERE id < :id AND create_date <= :create_date

Je zoekt dus eerst het vijfhonderdste record en dan haal je alle records weg die een lager id hebben en een oudere create_date. Merk wel op dat ik hier <= heb gebruikt bij create_date, aangezien je ook nog records kunt hebben met dezelfde timestamp.
 
Patrick cos

patrick cos

10/06/2013 15:17:34
Quote Anchor link
Ja dat klopt, maar mijn bedoeling was dat er maximaal 500 rijen in de database mogen komen.

Wat is trouwens het verschil tussen:
('$kolom1', '$kolom2', '$kolom3')";
en
('".$kolom1."', '".$kolom2."', '".$kolom3."')";
 
Chris PHP

Chris PHP

10/06/2013 15:21:32
Quote Anchor link
Op deze manier escape je de php variabelen.
('".$kolom1."', '".$kolom2."', '".$kolom3."')";

Wil er max 500 records in hebben, dan is het voor een insert eerst een select te doen, en vervolgens met mysql_num_rows() kijken hoeveel records het zijn. Zijn het er 500 dan voor je er geen meer op.
 
- Ariën  -
Beheerder

- Ariën -

10/06/2013 15:23:25
Quote Anchor link
Je kan ook met COUNT() in MySQL het aantal records tellen.
 
Patrick cos

patrick cos

10/06/2013 15:32:22
Quote Anchor link
hoe ik kan ze dan met count verwijderen? (500+ rijen)
Gewijzigd op 10/06/2013 15:52:50 door patrick cos
 
- SanThe -

- SanThe -

10/06/2013 15:52:39
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
$max
= 500;
$sql = "SELECT COUNT(id) as aantal FROM ... WHERE 1";
$result = mysql_query($sql);
if($result === false)
{

    // error
}
else
{
    $row = mysql_fetch_assoc($result);
    $aantal = $row['aantal'];

    // De eerste 500 houden:
    if($aantal < $max)
    {

        // INSERT
    }

    // De laatste 500 houden:
    // INSERT

    if($aantal >= $max)
    {

        $sql = "DELETE FROM ... WHERE 1 ORDER BY id ASC LIMIT " . ($aantal + 1 - $max);
        $result = mysql_query($sql);
        if($result === false)
        {

            // error
        }
    }
}

?>
Gewijzigd op 10/06/2013 16:06:28 door - SanThe -
 
Patrick cos

patrick cos

10/06/2013 15:58:31
Quote Anchor link
Bedankt voor jullie hulp!

Klopt het dat als nu een 500ste toegevoegd wordt, dat de eerste rij dan alleen verwijderd word?
 
- Ariën  -
Beheerder

- Ariën -

10/06/2013 16:04:47
Quote Anchor link
Dat kan je toch uittesten? Desnoods even met een kleiner aantal.
Lees wel even de gele comments...
 
Patrick cos

patrick cos

10/06/2013 17:12:27
Quote Anchor link
Mag ik trouwens ook gewoon vlak onder de insert het volgende plaatsen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$max
= 500;

    $row = mysql_fetch_assoc($result);
    $aantal = $row['aantal'];

    if($aantal >= $max)
    {

        $sql = "DELETE FROM tabel WHERE 1 ORDER BY id ASC LIMIT " . ($aantal + 1 - $max);
        $result = mysql_query($sql);
    }

?>


Ik zal alleen niet wat het volgende doet:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
WHERE 1 ORDER BY id ASC LIMIT " . ($aantal + 1 - $max);


Ook heb ik geen kolom met 'aantal', maar wel id of wordt dat niet bedoeld?
Gewijzigd op 10/06/2013 17:13:19 door patrick cos
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.