[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запись в базу (в начало списка, ограничение)
xxxLOGIATxxx
В таблице используется авто-инкремент, нужно ограничить число записей, тоесть, нужно сделать так, чтобы в таблице было максимум 10 записей (например), каждая новая запись вставало на место ID 1 а все остальные на одно одно число увеличивались

Пример:

|ID|Name|Surname|

|1|Вася|Уткин|
|2|Петя|Пупкин|
...

Мы хотим добавить Антошу Петрова не место Васи Уткина с ID 1 и должно получится следующее:

|1|Антоша|Петров|
|2|Вася|Уткин|
|3|Петя|Пупкин|
...

Ну и выставить ограничение на количество записей

Кто поможет? Или кого-то есть другой вариант реализации?



Спустя 3 минуты, 51 секунда (28.08.2010 - 10:28) Basili4 написал(а):
xxxLOGIATxxx
а ты еще 3 темы создай 100% пойдешь в бан а щас только 50%. Не используй Авто инкремент он не для этого

Спустя 31 минута, 36 секунд (28.08.2010 - 11:00) dr_Lev написал(а):
Как-то так попробуй...

$sql = "
declare counter int;
set counter = 9;
delete from tablename where id = 10;
while (counter >= 1) do begin
update tablename set id = counter + 1 where id = counter;
set counter = counter - 1;
end
insert into tablename values (id, name, surname) values (1,'
$name','$surname');
"
;


или так:

$sql = "delete from tablename where id = 10";
mysql_query($sql);
for ($i=9; $i>=1; $i--){
$sql = "update tablename set id = $i + 1 where id = $i";
mysql_query($sql);
}
$sql = "insert into tablename values (id, name, surname) values (1,'$name','$surname');"
mysql_query($sql);

Спустя 3 минуты, 28 секунд (28.08.2010 - 11:03) xxxLOGIATxxx написал(а):
Цитата (Basili4 @ 28.08.2010 - 07:28)
xxxLOGIATxxx
а ты еще 3 темы создай 100% пойдешь в бан а щас только 50%. Не используй Авто инкремент он не для этого

Благодарю за очень уважительное отношение, если все админы так вежливо будут изъясняться, то интернет будут называть не WEB 2.0 а WEB 3.0. Тема пользователями не удаляется.

К делу. Инкремент можно снести и сортировать по дате. А как выставиь ограничение? Нужно организовать удаление последней записи и добавление новой или есть способ выставить LIMIT в базе?

Спустя 1 минута, 49 секунд (28.08.2010 - 11:05) dr_Lev написал(а):
Цитата (xxxLOGIATxxx @ 28.08.2010 - 11:03)
есть способ выставить LIMIT в базе?

Такого к сожалению нет, разве что повесить триггер на таблицу, но не все хостеры поддерживают их...

Спустя 1 минута, 21 секунда (28.08.2010 - 11:06) xxxLOGIATxxx написал(а):
Цитата (dr_Lev @ 28.08.2010 - 08:00)
Как-то так попробуй...

$sql = "
declare counter int;
set counter = 9;
delete from tablename where id = 10;
while (counter >= 1) do begin
    update tablename set id = counter + 1 where id = counter;
    set counter = counter - 1;
end
insert into tablename values (id, name, surname) values (1,'
$name','$surname');
"
;


или так:

$sql = "delete from tablename where id = 10";
mysql_query($sql);
for ($i=9; $i>=1; $i--){
    $sql = "update tablename set id = $i + 1 where id = $i";
    mysql_query($sql);
}
$sql = "insert into tablename values (id, name, surname) values (1,'$name','$surname');"
mysql_query($sql);


Такого к сожалению нет, разве что повесить триггер на таблицу, но не все хостеры поддерживают их...


Я так и думал, спасибо.

Просто хочется найти максимально правильный вариант, идеализирую.

Спустя 8 минут, 19 секунд (28.08.2010 - 11:15) Basili4 написал(а):
Извините я не админ. но право слово уже задолбали с множественным постингом.
Я же писал не испльзуй авто инкремент щас напишу.

Спустя 48 секунд (28.08.2010 - 11:15) Basili4 написал(а):
$r=mysql_query("SELECT count(id) FROM table1 WHERE id=$id");

$row=mysql_fetch_row($r);

if ($row==0)

mysql_query("INSERT HIGH_PRIORITY INTO TABLE1 (
id, ......) VALUES ( $id, VALUE2)");

else
$id=1;
mysql_query("
UPDATE LOW_PRIORITY
TABLE1
SET
id = $id
WHERE
id = (select max(id) from TABLE1)");
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.