У меня есть таблица членов в MySQLКак определить заказ на новый товар?
CREATE TABLE `members` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(65) collate utf8_unicode_ci NOT NULL,
`order` tinyint(3) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
И я хотел бы, чтобы позволить пользователям заказать членам, как им нравится. Я сохраняю заказ в столбце order
.
Мне интересно, как вставить нового пользователя в нижнюю часть списка. Это то, что я сегодня:
$db->query('insert into members VALUES (0, "new member", 0)');
$lastId = $db->lastInsertId();
$maxOrder = $db->fetchAll('select MAX(`order`) max_order FROM members');
$db->query('update members
SET
`order` = ?
WHERE
id = ?',
array(
$maxOrder[0]['max_order'] + 1,
$lastId
));
Но это не совсем точным, а при наличии нескольких пользователей при добавлении новых членов в то же время, это может произойти в MAX(order)
будет возвращать одинаковые значения.
Как вы справляетесь с такими случаями?
Я пытаюсь предотвратить наличие двух элементов с одинаковыми значениями «порядок», если они вставлены одновременно. Я вставляю элемент с `order` being '0', а затем попытаюсь найти новое значение` order`, которое еще не было принято, но если 2 пользователя сделают это одновременно, у меня будет 2 равных значения. – 2008-09-19 19:37:36