forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   PHP / MySQL (http://forum.boolean.name/forumdisplay.php?f=135)
-   -   Определить количество записей, вставить запись? (http://forum.boolean.name/showthread.php?t=15518)

VotapilD 03.11.2011 15:01

Ответ: Определить количество записей, вставить запись?
 
Если количество людей нумируеться изначально с еденицы и никого не игнорит, то можно и так в конце концов сделать:

-сначала вставить в таблицу данные пользователя
-$id=mysql_insert_id();
-if($id<=10){Оставляем, выводим приняты}
-else{Удаляем, выводям не приняты}

Условие зависит от того, как в базе храниться...модами поиграться например.

При разрешении будет один запрос, при запрете - 2.

ЗЫ Если людей больше 10 уже, то блочим кнопочку подать заявку, что бы лишних неровов не было :3

shybovycha 03.11.2011 21:35

Ответ: Определить количество записей, вставить запись?
 
А если одна из записей промежутка id = (1; N) удалена, то промежуток чисел не сплошной и алгоритм валится =)

VotapilD 03.11.2011 23:49

Ответ: Определить количество записей, вставить запись?
 
Цитата:

Сообщение от VotapilD (Сообщение 208135)
Если количество людей нумируеться изначально с еденицы и никого не игнорит, то можно и так в конце концов сделать:

Дадада, знаю :3

shybovycha 04.11.2011 12:11

Ответ: Определить количество записей, вставить запись?
 
Мы с вами точно говорим об одном и том же?

Моя точка зрения:

Пускай даны записи ((1, *), (2, *), (3, *), (4, *), (5, *), (6, *), (7, *), (8, *), (9, *), (10, *)).
Ваш алгоритм работает - mysql_insert_id() возвращает 10, добавление не происходит.

Но вот в какой-то момент исчезают записи (3,*), (7,*), (4,*). Имеем теперь набор ((1, *), (2, *), (5, *), (6, *), (8, *), (9, *), (10, *)).
mysql_insert_id()
по-прежнему возвращает 10, алгоритм не работает - запись добавить-то можно.

В PostgreSQL немного иной принцип работы этих счетчиков - можно оперировать ими как необходимо то. В MySQL этого нет, посему есть лишь два способа переопределить поведение поля auto_increment:
  • truncate table - удаляет все записи из таблицы и обнуляет счетчик
  • вручную перебрать все записи и позадавать им новые значения поля. Но при этом необходимо либо иметь триггер, который будет обновлять все зависимые записи, либо предусмотреть запросы на ручное исправление зависимостей
А что имеете ввиду вы?

VotapilD 05.11.2011 12:14

Ответ: Определить количество записей, вставить запись?
 
В первом посте ничего не говорилось о возможности удаления, поэтому и предложил самый простой для меня вариант. Да, мы говорим об одном и том-же, но я писал обязательным условием последовательность этих записей без удаления промежуточных...

Если мой способ не подходит (слишком сложный в реализации для данной базы данных), то можно ппопробовать транзакции, может быть я их просто не допонял Тт" Разберусь надеюсь)


Часовой пояс GMT +4, время: 06:56.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot