Лимитированное добавление записей в БД

Печать RSS
399

Автор
Пишу, строю и воображаю
0
Привет!

Такая задача: пользователь добавляет в БД запись 1... 2... 3... четвертую... ... Десятую. После чего ОДИНАДЦАТАЯ добавляется, но также как и удаляется первая запись. То есть возможно содержать 10 записей, одинадцатая добавляясь за собой удаляет первую.

Есть ли такая опция в MySQL? можно ли решить запросом, или писать большой код на пых?)))

Лузер PHP
0
подчитай количество записей в таблице и поставь условие если записей больше 10 то удаляй первую запись,велосипед конечно
Автор
Пишу, строю и воображаю
0
а в таблице будут больше записей.. .потому что 10 записей можно оставлять например к разным товарам... например это отзывы.... у каждой записи будет поле с ID того товара, которому он принадлежит....

KinG`уренок
0
Велосипедничай с подсчетом и конструкцией if();
П

Пацак
0
Тут скорее "лимитированное удаление". После каждой вставки такой запрос:
DELETE FROM `table` WHERE /*твои данные*/ AND `id` < (
SELECT min(`id`) FROM (
 SELECT `id` FROM `table` WHERE /*твои данные*/ ORDER BY `id` DESC LIMIT 10 
) X
) 
Автор
Пишу, строю и воображаю
0
5, спасибо! ща буду юзать, н омне кажется это именно то что было нужно.

а можно узнать, что за ИКС (Х) в конце второго подзапроса?

Чатланин
0
DELETE FROM `table` WHERE `time` < (SELECT MIN(`time`) FROM (SELECT `time` FROM `table` ORDER BY `time` DESC LIMIT 10) AS del
Вот так у vantuz-а в rotor-е выполнено то что тебе нужно.
Изменил: AlyOha
П

Пацак
0
6. Moto-Moto, алиас для выбранных данных. (иначе будет ошибка)
Автор
Пишу, строю и воображаю
0
5, Еще раз спасибо, Im-ieee. Только понадобился код. Взял с темы.

Сделал следующее:

<?php
			@mysql_query("DELETE FROM `messages` WHERE `dialog`='$loginid' AND `id`<(SELECT min(`id`) FROM (SELECT `id` FROM `messages` WHERE `dialog`='$loginid' ORDER BY `id` DESC LIMIT 5) X )");
?>

Messages - таблица с сообщениями пользователей. Limit 5 - лимит на хранение сообщений. Dialog - это уникальный номер беседы, он соответствует ID юзера. То есть, если мой ID=90, то и Dialog будет 90.

ПРавивльно ли я сделал?

2 вопроса:
1. он удаляет же DESC по "старости"? По ID... У меня есть поле when, там время с датой в формате DATETIME. Может лучше по нему? Помоги пожалуйста составить запрос.
2. Почему в запрос два раза идет выборка WHERE? Это для образования вопрос)))
П

Пацак
0
1. Если нужно удалять старые записи (с меньшей датой), то просто заменить `id` на `when` в твоем запросе.
2. Одно условие для внутреннего подзапроса, другое - для внешнего. Тут 3 разных запроса фактически.
Стикеры / Теги / Правила