|
|
|
| Помогите составить запрос на удаление старых сообщений
вот такая таблица
CREATE TABLE outbox (
outbox_id INTEGER NOT NULL PRIMARY KEY,
outbox_send varchar(20) NOT NULL,
outbox_text TEXT NOT NULL,
outbox_time INTEGER UNSIGNED NOT NULL,
outbox_user varchar(20) NOT NULL
);
|
при добавлении нового сообщения нужно проверить если в таблице более 10 сообщений удалить самое старое
я делал вот такой запрос
сперва считал сколько у пользователя сообщений и если более 10 то выполнять след. код
"SELECT outbox_id FROM outbox WHERE outbox_user='".$log."' ORDER BY outbox_time ASC LIMIT 1;"
получал самую старую id по времени
"DELETE FROM outbox WHERE outbox_id='".$lastid."';" и удалял
|
но потом тут в форуме увидел такой код
"DELETE FROM outbox WHERE outbox_id < (
SELECT MIN(outbox_id) FROM
(
SELECT outbox_id FROM outbox
ORDER BY outbox_id DESC LIMIT 10
) AS s
) AND outbox_user='".$log."';
|
только тут не по времени а по id проверяется, и этот код выполняется каждый раз при добавлении, какой из них более лучший
p.s. второй код иногда непонятно удаляет | |
|
|
|
|
|
|
|
для: ivanov_max
(13.08.2009 в 02:26)
| | ещё такой вариант
DELETE FROM outbox
WHERE (SELECT
`TABLE_ROWS` FROM information_schema.tables
WHERE `TABLE_SCHEMA` ='test' AND `TABLE_NAME` ='outbox')>9
ORDER BY outbox_time
LIMIT 1
|
TABLE_SCHEMA` ='test' AND `TABLE_NAME` ='outbox'
это названия базы данных и таблицы | |
|
|
|
|
|
|
|
для: heed
(13.08.2009 в 08:05)
| | Когда Вам в ванной комнате надо воду в душе открыть/закрыть, Вы сантехника со сварочным аппаратом зовете? | |
|
|
|
|
|
|
|
для: heed
(13.08.2009 в 08:05)
| | что-то по вашему я не очень понял
как вариант я думаю может лучше вычислить сколько сообщений всего и если более 10 то сделать так
DELETE FROM outbox WHERE outbox_id=(SELECT MIN(outbox_id) FROM outbox WHERE outbox_user='".$log."' LIMIT 1);
|
| |
|
|
|
|
|
|
|
для: ivanov_max
(13.08.2009 в 02:26)
| | outbox_user='".$log."'; во внутреннем селекте у Вас пропущено. Отсюда и глюки. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 10:41)
| | спасибо
теперь выводит то что нужно все старые сообщения кроме 10 последних
SELECT outbox_id FROM outbox WHERE outbox_id < (
SELECT MIN(outbox_id) FROM
(
SELECT outbox_id FROM outbox
WHERE outbox_user='".$log."'
ORDER BY outbox_id DESC LIMIT 10
)
) AND outbox_user='".$log."';
|
| |
|
|
|