Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ограниченное число записей 
V
    Опции темы
andDavid
Дата 26.1.2011, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Есть таблица сообщений от пользователей. Нужно хранить определенное количество этих сообщений, скажем 20. И если придется написать 21 строку в таблицу, то ее надо внести вместо 1 строки, 22 - вместо 2 строки и так далее. То есть получается бесконечный цикл. Как написать такой запрос? 
PM MAIL   Вверх
triclosan
Дата 26.1.2011, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



когда таблица переполнится, наберется максимальное количество записей - задача сводится к обновлению самого старого поля. Поэтому я бы сразу забил макет таблицы (пусть даже с пустыми записями), это упростит запрос.
PM MAIL   Вверх
andDavid
Дата 26.1.2011, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Цитата(triclosan @ 26.1.2011,  18:18)
когда таблица переполнится, наберется максимальное количество записей - задача сводится к обновлению самого старого поля. Поэтому я бы сразу забил макет таблицы (пусть даже с пустыми записями), это упростит запрос.

С макетом идея хорошая, но мне надо выводить всю таблицу, даже если в ней всего 1 запись. А так придется вывести все пустые строки.
PM MAIL   Вверх
triclosan
Дата 26.1.2011, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



могу предложить "костыль" из серии `msg` is not null или `active`='Y' при выводе таблицы.  Все равно универсальный запрос добавления/изменения записей сложнее будет.
PM MAIL   Вверх
andDavid
Дата 26.1.2011, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Цитата(triclosan @ 26.1.2011,  18:40)
могу предложить "костыль" из серии `msg` is not null или `active`='Y' при выводе таблицы.  Все равно универсальный запрос добавления/изменения записей сложнее будет.

Давай )
PM MAIL   Вверх
Akina
Дата 26.1.2011, 18:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 106
Всего: 454



Цитата(andDavid @  26.1.2011,  19:09 Найти цитируемый пост)
Как написать такой запрос?  

Напиши процедуру, а не запрос:
Код

create procedure proc (in data to insert)
declare cnt integer;
select count(*) into cnt from table;
if cnt > 19 then
  set cnt = cnt - 19;
  delete from table order by dt asc limit cnt;
end if;
insert into table(fields) values (data to insert);
end;

и вызывай её.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
andDavid
Дата 26.1.2011, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 71
Регистрация: 12.2.2010

Репутация: нет
Всего: нет



Цитата(Akina @ 26.1.2011,  18:51)
Цитата(andDavid @  26.1.2011,  19:09 Найти цитируемый пост)
Как написать такой запрос?  

Напиши процедуру, а не запрос:
Код

create procedure proc (in data to insert)
declare cnt integer;
select count(*) into cnt from table;
if cnt > 19 then
  set cnt = cnt - 19;
  delete from table order by dt asc limit cnt;
end if;
insert into table(fields) values (data to insert);
end;

и вызывай её.

Да, это оно.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.1185 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.