В таблице есть поле orders_id в нём хранятся числовые id заказов в таком виде: 29 457 3467844 235 2345 33467899 331136 9272 Т.е. случайные числа не по-порядку. Каким образом (с помощью запроса mysql) можно сгенерировать случайное число в диапазоне 10-10000000, которого НЕТ в поле (т.е. уникальное для этого поля)?
вообще-то для этого придумали AUTOINCREMENT, но если ты не ищешь простых путей, то можно попытаться так: Код (Text): SELECT max(orders_id)+1 FROM hujnane_table
artoodetoo, я так понимаю этот запрос выберет поле с максимальным значением, прибавит 1 и возвратит? Мне это не подойдет. Нужно что-то вроде php функции mt_rand(10, 10000000); при условии что такого ID ещё нет в поле orders_id. Вот некоторые подробности по моей теме: Когда пользователь переходит на страницу заказа я должен сгенерировать уникальный ID заказа и вписать его в скрытое поле <input type='hidden' name='ornum' value='265895' /> на странице заказа. Этот ID я передаю биллингу, когда пользователь кликает "оплатить" и попадает на сайт биллинга. На стадии оформления заказа биллинг передаёт мне этот ID обратно в скрытый файл Result.php и, если все успешно я вписываю этот ID к себе в БД MySQL вместе с другой информацией по платежу. Теперь вопрос, если к примеру на сайте было 20 заказов, пользователь перешел на страницу заказа, я вписал в скрытое поле следующий незанятый ID - 21. В это время заказ начали оформлять ещё 5 пользователей - им тоже вписал скрытое поле ID - 21, ведь он ещё не занят (биллинг не обращался на Result.php и в БД этот ID не вписан). В результате я получу ситуацию когда в какой то момент пользователь оформлявший заказ, завершил его вписав ID 21 в БД. А следующий сразу за ним другой пользователь, тоже получивший ID 21 будет пытаться вписать в БД дублирующую запись и получит ошибку, если поле будет, как мне советуют auto_increment.
ну или проверять и генерить, генерить и проверять... Добавлено спустя 2 минуты 21 секунду: дык вам надо сгенерить уникальный, а не найти такой, которого в базе нет. так вы и генерите =) uniqid() http://php.ru/manual/function.uniqid.html
действительно, клиент путается в показаниях! тебе точно нужно "случайное число, сгенерированное в mysql", или таки тебе нужен уникальный идентификатор? Добавлено спустя 26 минут 14 секунд: если ты используешь автоинкрементное поле ты гарантированно НЕ столкнешся с дубликатами. поверь, отцы и деды IT придумали этот тип специально для таких фокусов. Добавлено спустя 2 минуты 19 секунд: про max()+1 забудь, это была шутка, которую ты не оценил