Alleen de laatste 500 rijen in tabel behouden.
Rij 501 moet dus automatisch verwijderd worden uit de database, dit krijg ik niet voor elkaar.
Heeft iemand enig idee?
Gewijzigd op 10/06/2013 11:52:03 door - SanThe -
Mag je een limit ook bij een INSERT gebruiken?
Gewijzigd op 10/06/2013 12:51:51 door Aad B
(tabelnaam is even als test)
$query = "
INSERT INTO tabel
(kolom1, kolom2, kolom2)
VALUES
('$kolom1', '$kolom2', '$kolom3')";
Ik zou het dan wel zo doen:
Code (php)
1
2
3
4
5
6
7
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
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.
Wat is trouwens het verschil tussen:
('$kolom1', '$kolom2', '$kolom3')";
en
('".$kolom1."', '".$kolom2."', '".$kolom3."')";
('".$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.
Je kan ook met COUNT() in MySQL het aantal records tellen.
Gewijzigd op 10/06/2013 15:52:50 door patrick cos
Code (php)
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
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
}
}
}
?>
$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 -
Klopt het dat als nu een 500ste toegevoegd wordt, dat de eerste rij dan alleen verwijderd word?
Lees wel even de gele comments...
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
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);
}
?>
$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:
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