Как сделать чтобы записи в MySQL не совпадали?

Sirius

PHP+MySQL=LOVE
А как же?
Уникальный индекс если будет - будет строиться - Кто-ИД, Кому-ИД, Сообщение! В данном случае (как я написал про мужчские привычки)- Кому-ИД будет различаться конечно! Но ты говоришь скорость работы падает!

Ну я уже не знаю что делать:( Может проверять на время отсылки! Чтоб не меньше 1 минуты!
 

Sirius

PHP+MySQL=LOVE
Ну как же - я отправил тебе любовное послание и потом 2-й раз решил дописать самое главное? но отличное от первого:
"Давай поженимся!" - Чтож теперь люди никогда не поженятся???
 

Crazy

Developer
Каждое сообжение просто должно иметь свой ID.

Схема проста: когда юзер изъявляет желание написать сообщение -- ты резервируешь ID и в hidden-поле пересылаешь его юзеру.

По получении поста из форма ты сверяешь, выдан ли данному юзеру этот ID. Если нет -- просто выкидываешь данные, пршедшие из формы, ибо это либо повторный пост, либо попытка флуда.

Этот же ID используешь в качестве первичного ключа.

Подробнее о таблицах:

Код:
create table messages (
  msgID xxxx not null primary key,
  from ....,
  to ....,
  text ....
)

create table reservedID (
  msgID xxxx not null primary key,
  user ....
)
Здесь xxxx -- выбранный тобой тип для ID. Он может быть хоть числовым, хоть строковым -- на твой выбор.
 

Sirius

PHP+MySQL=LOVE
Я ничо не понял - действует что наши проигрывают!

У меня в таблице мессажей есть ИД сообщения - это инкремент! Он увеличивается каждый раз - также я выдаю юзерам их сообщения - по полю КомуИД выдаю по номеру сообщения само сообщение!

В этом то вся и проблема - он ведь при каждом новом сообщении меняется - как я буду проверять на уникальность записи?
 

Sirius

PHP+MySQL=LOVE
Предалагаешь лезть в базу, брать последний ИД инкрементировать его вручную и вдобавок проверять на схожесть с предыдущей записью?

Аааа... понял - проверять я буду только последний инкремент!

Не нравится мне эта идея!
Во первых потому что Россия уже 3-1 продувает - а во вторых потому что при большом количестве народу этот ИД я могу дать нескольким людям - человек попал на страницу отсылки - я дал ему ИД в хиддене - но он ещё не отослал, значит пока он не отошлёт другой зашедший на страницу получит тот же ИД и начнётся гонка - кто пошлёт первым!
Мы с тобой не в ту степь зашли - тут есть выход но много новых проблем лезут и т.д.!
 

Crazy

Developer
Логика неверна, но это неважно. :) Если тебе так дорог автонумератор -- просто вынеси его в отдельную таблицу из одного поля. :)

Когда пользователь хочет написать сообщение -- ты вставляешь туда запись извлекаешь ее ID, пишешь в список зарезервированных. И т.д. :)

Вариант без автонумератора тоже прост. К примеру, вот так:
1. Лочим таблицы сообщений и зарезервированных кодов.
2. Ищем максимум по двум таблицам (дело быстрое, ибо просто выполняется чтение из индекса).
3. Добавляем запись в таблицу резервирования.
4. Снимаем блокировку.

Есть, нопятно, и другие -- более экономные -- варианты. Но я стараюсь излагать наиболее очевидные.
 
Сверху