2013-08-15 3 views
0

Я хочу, чтобы создать таблицу MySQL с тремя столбцами ID, имя, name_id,автоматически генерировать уникальный идентификатор для символов MySQL

Дело в том, что я хочу для того чтобы достигнуть это всякий раз, когда пользователь вводит имя в базу данных , то система должна генерировать уникальный идентификатор для имени автоматически.

например. имени JJ тогда name_id должен быть 1, и если имя DD тогда name_id должен быть 2 также, если имя JJ повторяется в базе данных, то name_id должна быть 1.

Значение number_id следует назначать в соответствии с именем сортировка т.е. должен получить 1 и B должны получить 2.

Как это может быть достигнуто с помощью сценариев SQL или триггеров?

+0

@Prix: что не будет соответствовать его последнему требованию. Хотя я не могу увидеть много пользы для этого последнего требования. @ user2614607: Если 'A' должно быть' 1' и 'B' должно быть' 2', что должно получиться 'user2614607'? Это как-то определяется? –

+0

Это означает, что идентификатор должен быть назначен в соответствии с Алфавитной организацией имен. например ABC должен получить 1 и CBA получить значение 2 и т. Д. – user2614607

+0

@ user2614607 да, но если вы не добавляете каждое имя сразу, ваше поле name_id не может продолжать поддерживать эти числа в порядке, если только он не заменяет значение на всех элементы после него, когда новый добавлен посередине ... почему вы не могли использовать сортировку по именам и динамически определять свою позицию в наборе записей, вместо того, чтобы хранить это значение? – Claies

ответ

0

создать функцию sql, которая возвращает имя _id при передаче имени в качестве параметра. одним из способов было бы добавить все символы, но это не будет сделано, потому что различная компоновка одинаковых символов даст ту же сумму для разных имен. Может быть, конкатенация первичного индекса в конце суммы будет выполнять задание. Я думаю, вы можете определить подходящую логику в функции sql для достижения результатов.

+0

Ваш ответ имеет смысл для меня. но можете ли вы уточнить, когда пользователь вводит имя, система должна сохранять имя_ид в базу данных в режиме rumtime. – user2614607

+0

Я не уверен, какой интерфейс вы предоставите своему пользователю, если вы сами будете пользователем.в любом случае вам нужно будет создать функцию, которая позволяет использовать функцию name_to_id ('name', 'индекс автоматического инкремента) и возвращает name_id, которая является суммой всех символов, связанных с индексом. затем введите в таблицу (col1, col2, col3) значения (значение 1, value2, name_to_id (значение1, значение2); это может работать – Salik

1

Как насчет следующего?

INSERT INTO tbl (name,name_id) 
SELECT newname, COALESCE((SELECT name_id FROM tbl WHERE name=newname), 
         (SELECT max(name_id)+1 FROM tbl)) 

Это при условии, что столбец id заботится о себе, то есть это auto_increment-е изд.

newname может также быть константой строки, с которой вам придется работать в вашей команде.

Приведенная выше команда лучше всего работает при использовании для индивидуальных вставок («от пользователя»). Если вы хотите выполнить массовый импорт, это может быть довольно дорогостоящим, поскольку для каждого нового значения таблица tbl будет проверяться дважды. В этом случае другая логика должна быть применена:

Сначала найдите все name - name_id пары с помощью group ред выбора, а затем INNER JOIN результаты со списком импорта. Для остальных элементов (без существующих name_id сек) выполните следующие действия: выяснить самый высокий @i=max(name_id) всех записей, а затем импортировать отсортирован списка с механизмом автонумерации (@i:[email protected]+1) для name_id на месте ...

Смежные вопросы