|
|
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, Подскажите пожалуйста мне вот с такой ситуацией: Делаю 2 таблички. Первая (о которой собственно и вопрос) это: Player (id(primary), name, info). Вторая, предположим, Player_data в которой 1 поле берётся как foreign key из Player (как бы всё логично). Так вот. У меня есть необходимость чтоб Player.name было unique - я это сделал. И запрос на добавление выглядит следующим образом (с учётом что id стоит как auto increment): Код: sql 1. То есть, такой player в бд у меня один, и каждый раз проверяется и обновляется его info. Для первого получим id = 1. Но получается так, что после кучи запросов с одинаковым игроком (а у меня так и есть) - когда вставляется следующий игрок, то его id уже выходит никак не "2", а допустим, "1000" - (это я понимаю как и почему). И меня это не устраивает. То есть, я хочу сделать чтоб следующий добавился 100% с id = 2. У меня была идея отключить auto increment и вручную выбирать max(id) + 1, но наверное так делать нельзя ? Видел способ чтоб делать Код: sql 1. но я думаю что это сильно затратно по ресурсам каждый раз перед каждым запросом ещё и это делать. Как тогда быть ? Какие есть варианты ? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 02:50:57 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Igor-ZИ меня это не устраиваетпочему? если вам нужна нумерация, делайте для неё поле ПК не предназначен для пользовательской нумерации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 05:12:13 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Igor-Z, вы объяснили все очень путанно и в итоге ничего не понятно. Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить. В этом случае я смогу ответить на ваши вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 09:31:42 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
подитожу предыдущих ораторов. ТС, а зачем тебе нумерация подряд? вот у тебя номер телефона какой? допустим 1234576 , добавь отними еденицу и позвони, скорей всего один из двух номеров будет не обслуживаться. и? кого это напрягает, что задействованные номера не попорятку? серия и номер паспорта тоже не попорядку, сразу диапазон выдаёться на месность, но не факт что они их все используют, и будут номера которые ваще никогда не использовались. а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. и что будешь делать? бежать на форум и спрашивать...хлопцы, я на който чорт мучался делал логику с непрерывным примари кеем, а теперь не знаю как быстро переделать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 11:07:27 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Lumixвы объяснили все очень путанно и в итоге ничего не понятно.Да всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам. alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. и что будешь делать? бежать на форум и спрашивать...хлопцы, я на който чорт мучался делал логику с непрерывным примари кеем, а теперь не знаю как быстро переделать !Поставить ему признак "удалён" Что, впрочем, не решит "проблему" с обломом вставок, например (потому что проблема не в обломе вставок, а в хотении странного, т.е. использовании автоинкремента для нумерации) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:23:38 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
tanglirIgor-ZИ меня это не устраивает почему? Наверное, это главный вопрос. Да в принципе устраивает, но как-то глаз режет :) Выходит так что планируется постоянный парсинг страницы с данными, и их занос в бд. И до того как туда попадёт следующий игрок, то его id может уже быть очень большим. По большому счёту по-барабану. Но, вот думал, что можно сделать чтоб вести поле id аккуратнее, так сказать. tanglirесли вам нужна нумерация, делайте для неё поле ПК не предназначен для пользовательской нумерации Делать нумерацию прям столбцом в бд ? А если не сложно, можно небольшой пример ? :) Спасибо. ps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию. LumixIgor-Z, вы объяснили все очень путанно и в итоге ничего не понятно. Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить. В этом случае я смогу ответить на ваши вопросы. Не думаю что был важен тип данных, скорее, как правильно заметили "id как для нумерации". alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. Не совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записи. Хотя может быть и глупость говорю. tanglirДа всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам. Всё верно говорите. Только вот теперь думаю "а имеет ли вся эта затея смысл" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 12:43:54 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Igor-Zps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию.Ну так тем более - если устраивает нумерация "на лету" при выводе, зачем городить весь этот огород с последовательным ПК (ну или даже не ПК)? Igor-ZНе совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записиУдалили пользователя с ид=10. А есть ещё юзеры с ид=11 и больше. Что делать с ними? Сдвигать вниз? - превед внешним ключам. Оставлять на месте? - а как же непрерывность? Igor-ZТолько вот теперь думаю "а имеет ли вся эта затея смысл" :)Подумайте ещё вот над чем - автоинкремент работает так, как он работает вовсе не потому, что разрабы были ленивыми :) ЗЫ. Впрочем, если у вас однопользовательская система, то можно и на автоинкременте сделать, только опять же зачем? Головной боли гораздо больше, чем преимуществ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:10:02 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
tanglirУдалили пользователя с ид=10. А есть ещё юзеры с ид=11 и больше. Что делать с ними? Сдвигать вниз? - превед внешним ключам. Оставлять на месте? - а как же непрерывность? Нет, не предполагал сдвигать вниз, а то действительно получилось бы чёрт знает что. Непрерывности бы конечно не получилось, но и разбега, всё таки, не было бы такого большого по значениям. tanglirЗЫ. Впрочем, если у вас однопользовательская система, то можно и на автоинкременте сделать, только опять же зачем? Головной боли гораздо больше, чем преимуществ. Ну а всё-же, если чисто теоретически, можно ли одним запросом, с учётом того, что id будет не авто, формировать запрос вроде этого ? Код: sql 1. Я понимаю что я написал его с ошибкой, и он не выполнится из-за использования там MAX(id). Либо только через 2 запроса - первым селектить max(id), а уже во второй запрос вставлять его значение + 1... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 13:47:11 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Igor-Ztanglirпропущено... почему? Наверное, это главный вопрос. Да в принципе устраивает, но как-то глаз режет :) Выходит так что планируется постоянный парсинг страницы с данными, и их занос в бд. И до того как туда попадёт следующий игрок, то его id может уже быть очень большим. По большому счёту по-барабану. Но, вот думал, что можно сделать чтоб вести поле id аккуратнее, так сказать. tanglirесли вам нужна нумерация, делайте для неё поле ПК не предназначен для пользовательской нумерации Делать нумерацию прям столбцом в бд ? А если не сложно, можно небольшой пример ? :) Спасибо. ps - да и есть ли в этом смысл, можно, наверное, селектом при выводе добавлять нумерацию. LumixIgor-Z, вы объяснили все очень путанно и в итоге ничего не понятно. Если хотите получить от меня ответ, то уберите из задачи формулировки, которые можно толковать множественными вариантами и добавьте конкретные данные для примера двух типов: какие данные есть, какие данные хотите получить. В этом случае я смогу ответить на ваши вопросы. Не думаю что был важен тип данных, скорее, как правильно заметили "id как для нумерации". alex564657498765453а завтра зохочешь историю вести, и если юзер с айди 10 удалился, надо будет в таблицу истории добавить что был такой себе юзер вася с айди 10, и по этому айди ещо в других таблицах для маркетинга например по нему данные сохраняються. Не совсем понял как одно связано с другим. Если id=10 удалится, то это же не значит что мы в будущем воспользуемся его номером 10 для новой записи. Хотя может быть и глупость говорю. tanglirДа всё понятно - ТСу хочется иметь свою непрерывную нумерацию. Он тут далеко не первый с этим вопросом, и все они получают один и тот же ответ - хочешь быть счастливым - будь им!иметь свою непрерывную нумерацию - делай её сам! И все её нюансы разруливай тоже сам. Всё верно говорите. Только вот теперь думаю "а имеет ли вся эта затея смысл" :) О...теперь ясно зачем ему непрерывная нумерация....:) Чувак, я когда начал на пхп писать, то по привычке пытался оптимизировать как на делфи код, хотя для пхп это неоптимизация, ибо парсить сложнее порой. память пытался экономить, не создавая длинные ключи в асоциативных масивах... я к тому, что такое бывает при смене языка програмирования, или типа задач, когда интуиция=Прежний_опыт+Старый_опыт выдаёт интуитивные мысли...вот по типу как ты сказал...большой айди глаза режет. ЗЫ у меня тоже кстате такое было когда впервые с базами начал работать. счас изза махинаций при разработке, у меня вообще нумерация началась с нескольких милионов и ничо... категории первые в системе остались с айди 20-30, а остальные уже удалены(постоянно создавались удалялись при разработке) и счас на продакшине нумерация началась с 300000 и ничо. нормально всё. --- айди у меня кроме как для идентификации в базе не используеться нигде. юзер в ссылках видит совсем другое значение. если ты просто не хотел чтобы в ссылках айдишники были большими, так заведи ещо одно поле(не переживай нащот экономии, у меня на 10комилионой таблице поле одно, которое ещо не используеться вообще, и ничо..живём ) я к тому что не пытайся сразу идиализировать и оптимизировать...сначала получи работающий код, потом сделаешь чтоб он работал правильно, потом без ошибок, и только потом будешь ускорять его... банальные слова, но чем лучше у человека логика(как в твоём случае) тем больше хочеться сразу про всё подумать... поверь опыту миксофта и других сдесь... забей на ПК, автоинкримент и нормально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 14:32:09 |
|
||
|
Primary key без auto-increment
|
|||
|---|---|---|---|
|
#18+
Всё правильно говоришь :) Сначала сделал рабочий код, потом начал все эти оптимизации по мелочам (полностью для себя, но всё же..) и в итоге так до "ввода в действие" всего проекта и не дошло :) ps - просто добавлю, чтоб висело в теме: (был мой вопрос про чисто теоретически) Оказывается, это можно сделать вот так (id без auto, по-дефолту 0) Код: sql 1. 2. 3. В любом случае всем спасибо за советы :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.09.2014, 14:41:08 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38758689&tid=1834176]: |
0ms |
get settings: |
7ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
56ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 311ms |

| 0 / 0 |
