Среда, 13 Ноября 2024, 13:19

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Генерация случайных имен php, mysql
TalcoДата: Суббота, 13 Октября 2012, 06:07 | Сообщение # 1
почетный гость
Сейчас нет на сайте
Имеется таблица имен name_table и таблица фамилий family_table - нужно генерировать из этих имен и фамилий уникальные записи и записывать их в таблицу full_name, то есть в таблице full_name, каждое полное имя должно быть уникальным...

Иван Иванов, Сергей Иванов, Сергей Петров, Иван Петров...


xNova: Революция
miker9Дата: Суббота, 13 Октября 2012, 10:31 | Сообщение # 2
частый гость
Сейчас нет на сайте
Я не знаком с PHP, так что извините если я ошибаюсь.
Необходимо создать двойной цикл(цикл в цикле).Первый цикл перебирает имена, второй фамилии.Т.е. к первому имени мы поочередно приписываем все фамилии, потом переходим на второе имя итд.
TalcoДата: Суббота, 13 Октября 2012, 17:33 | Сообщение # 3
почетный гость
Сейчас нет на сайте
Quote (miker9)
Я не знаком с PHP, так что извините если я ошибаюсь.
Необходимо создать двойной цикл(цикл в цикле).Первый цикл перебирает имена, второй фамилии.Т.е. к первому имени мы поочередно приписываем все фамилии, потом переходим на второе имя итд.

Я бы так и сделал, если все было так просто... Проблема в том, что таблицы постоянно дополняются, в определенный момент нужно сгенерировать еще новые полные имена, а проводить итерацию по всем именам еще раз нельзя, т.к. full_name с уникальным id и убирать его нельзя!


xNova: Революция
Andy-goДата: Вторник, 16 Октября 2012, 19:54 | Сообщение # 4
участник
Сейчас нет на сайте
создаешь три массива "имена" и "фамилии" и "имя_фамилия" в цикле берешь из массива "имя" первое значение и из "фамилий" первое значение составляешь вариант имя1+фамилия1 и сравниваешь его со всеми уже существующими в в массиве "имя_фамилия", если совпадений не найденно добавляешь составленный вариант в таблицу и обновляешь массив "имя_фамилия", затем составояешь вариант имя1+фамилия2 и сравниваешь его и т. д. когда пройдешь по массиву фамилии до конца начинаешь снова но уже с имя2+фамилияХ и т.д.

Сообщение отредактировал Andy-go - Вторник, 16 Октября 2012, 20:04
TalcoДата: Вторник, 16 Октября 2012, 20:06 | Сообщение # 5
почетный гость
Сейчас нет на сайте
Quote (Andy-go)
в цикле составляешь вариант имя1+фамилия1 и сравниваешь его со всеми уже существующими в таблице имя_фамилия, если совпадений не найденно добавляешь составленный вариант в таблицу, затем составояешь вариант имя1+фамилия2 и сравниваешь его и т. д.

Не вариант... Слишком много итерации, и при каждой запрос к бд - долго и накладно для mysql.

Жду еще предложений!!!


xNova: Революция
Andy-goДата: Вторник, 16 Октября 2012, 20:11 | Сообщение # 6
участник
Сейчас нет на сайте
глупости вся процедура займет менее секунды
TalcoДата: Среда, 17 Октября 2012, 07:25 | Сообщение # 7
почетный гость
Сейчас нет на сайте
Quote (Andy-go)
глупости вся процедура займет менее секунды

Да, если в базе по десять имен и фамилий. А если их много? К примеру, у меня тестовая база содержит 100 имен и 1000 фамилий. Считать умеем? Сколько вариантов имя+фамилия получится? И это только тестовая бд.

Добавлено (17.10.2012, 07:25)
---------------------------------------------
ЗЫ Глупости - это отредактировать сообщение, на которое уже ответили и писать, что ответ - это глупости!!!


xNova: Революция
TimKruzДата: Среда, 17 Октября 2012, 09:18 | Сообщение # 8
старожил
Сейчас нет на сайте
Я не знаю, для чего тебе нужно это, но могу предложить не анализировать все и не составлять все возможные варианты. 100 имен и 1000 фамилий это 100000 вариантов. Если это нужно для онлайн-игры, то столько вариантов не имеет смысла - ни игроков, ни ботов столько ты не сделаешь. Если, например, игроку предлагается выбрать имя и фамилию персонажу, то можно выбирать соответствующую пару по запросу...

А если тебе все-таки нужна автоматически пополняющаяся база на миллионы имен-фамилий, то выход тут следующий: нужно где-то сохранять колличество обработанных имен и обработанных фамилий, например, в ячейке с индексом #0 (#1) соответствующей базы. Фактически, это будет не колличество, а номер последнего обработанного имени/фамилии. При этом следует учесть тот факт, что новые имена и фамилии добавляются в концы баз. Далее. Скрипт, занимающийся обработкой баз, должен сначала считать эти две переменные. При этом проверяется длина базы (последний элемент). Если индекс конца базы не равен (больше) индекса в нашей переменной - значит, есть необработанные имена и/или фамилии. Тогда скрипт начинает проходы по базам как обычно, но не для всех элементов, а только новых. То есть берется первое новое имя и прогоняется по фамилиям, берется новое и так далее; затем обрабатываются новые фамилии. При этом нужно подумать над лишнем повторением пар имя-фамилия (мне лень сейчас думать, но там простое решение). Счетчики последних имен/фамилий должны либо подниматься до индекса конца базы после всех обработок, либо инкрементироваться после каждой интеррации соответствующего цикла.
Следует также отметить, что базы должны блокироваться во время работы скрипта, чтобы не было изменений со стороны других скриптов или параллельных вызовов одного скрипта. MySQL не знаю, но файлы в PHP блокировать можно.


TalcoДата: Среда, 17 Октября 2012, 09:29 | Сообщение # 9
почетный гость
Сейчас нет на сайте
TimKruz, спасибо - это, то что нужно!!!

xNova: Революция
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг