Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL? / 10 сообщений из 10, страница 1 из 1
08.10.2013, 11:44
    #38419959
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
Есть таблица t1 как сделать так чтобы новые добавления перезаписывали более старые. И как сделать чтобы записей было только 15?
...
Рейтинг: 0 / 0
08.10.2013, 12:44
    #38420085
seejil
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
Странный вопрос.
Не вижу сложности update вместо insert'a делать. Или insert on duplicate key update
...
Рейтинг: 0 / 0
08.10.2013, 12:46
    #38420092
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
seejilСтранный вопрос.
Не вижу сложности update вместо insert'a делать. Или insert on duplicate key update

О, апдейтить более старую запись?
...
Рейтинг: 0 / 0
08.10.2013, 12:59
    #38420114
keinW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
Если "раскидать" проблему на составные части, то решение очевидно (не претендую на оптимальность и оригинальность):
1. В имеющуюся таблицу нужно добавить колонку-флаг "LAST" Значение флага 1 и 0 (true-false) (0/false по-умолчанию). Добавить колонку row_number, значение которой будет соответственно 1...15
2. При добавлении новой записи в таблицу:
select row_number into :r_num where last=1;
если возвращается пустой набор - значит записей в таблице нет =>new_row=1;
если возвращается значение row_number, то
if(r_num+1<=15) then new_row=r_num+1;
else new_row=1;
3. Новая запись:
Есть ли строчка с таким номером строки? select count(*) into :cnt;
if (cnt<15) then (INSERT into T1 (row_number, col1...col3, last) values (new_row, xxxx...xxx, 1));
else (Update table t1 set col1=.... last=1 where row_number=new_row);

4. Снимаем флаг Last со старой записи: update t1 set last=0 where row_number=r_num;

Как-то так. Осталось обернуть это в похапэ.
...
Рейтинг: 0 / 0
08.10.2013, 13:35
    #38420205
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
keinWЕсли "раскидать" проблему на составные части, то решение очевидно (не претендую на оптимальность и оригинальность):
1. В имеющуюся таблицу нужно добавить колонку-флаг "LAST" Значение флага 1 и 0 (true-false) (0/false по-умолчанию). Добавить колонку row_number, значение которой будет соответственно 1...15
2. При добавлении новой записи в таблицу:
select row_number into :r_num where last=1;
если возвращается пустой набор - значит записей в таблице нет =>new_row=1;
если возвращается значение row_number, то
if(r_num+1<=15) then new_row=r_num+1;
else new_row=1;
3. Новая запись:
Есть ли строчка с таким номером строки? select count(*) into :cnt;
if (cnt<15) then (INSERT into T1 (row_number, col1...col3, last) values (new_row, xxxx...xxx, 1));
else (Update table t1 set col1=.... last=1 where row_number=new_row);

4. Снимаем флаг Last со старой записи: update t1 set last=0 where row_number=r_num;

Как-то так. Осталось обернуть это в похапэ.

Возможно спасибо за решение, мне известно что есть как бы встроенная то ли функция то ли ещё что, в самом Mysql которая решает эту задачу.
Типа, указываю количество строк в таблице и она сама перезаписывает более старые, может знает об этом кто?
...
Рейтинг: 0 / 0
08.10.2013, 13:51
    #38420246
keinW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
Если вы хотите/имеете возможность, то возможно это реализовать триггером на апдейт/инсерт
...
Рейтинг: 0 / 0
08.10.2013, 15:49
    #38420517
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
keinWЕсли вы хотите/имеете возможность, то возможно это реализовать триггером на апдейт/инсерт

Вот как Вы думаете, что лучше использовать, то что вы написали или триггер?
...
Рейтинг: 0 / 0
09.10.2013, 10:52
    #38421194
keinW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
Я бы все такие вещи "пихал" в бэкэнд, т.е. в базу данных.

Вопрос в том есть ли у вас постоянный доступ к базе данных? А если через месяц вы захотите не 15, а, скажем, 30 записей историзировать? Кто будет менять тригер? У вас есть возможность менять тригер или вам кого-то нужно просить. Тут на первое место выходит еще и вопрос практичности.
...
Рейтинг: 0 / 0
09.10.2013, 11:02
    #38421219
Маша и
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
keinW,
ок, спасибо, буду использовать Ваш пример.
...
Рейтинг: 0 / 0
09.10.2013, 12:09
    #38421330
keinW
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL?
А почему вообще появилась необходимость на ограничение количества записей в таблице? Если вам нужны последние 15, то и берите последние 15. Если вас смущает, что таблица становится слишком большой, то режьте ее с помощью хранимой процедуры с определенной периодичностью.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [PHP+MySQL] Как сделать само-перезаписывающую таблицу MySQL? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]