MySQL группы по установленному идентификатору - PullRequest
0 голосов
/ 26 апреля 2011

База данных MYSQL:

У меня есть таблица данных, которую мне нужно поместить в две таблицы. В одной таблице содержатся люди и животное. Каждая запись - это человек и животное. Я переношу это в базу данных с несколькими таблицами и хочу сгруппировать по именам людей, а затем дать группе идентификатор (например, идентификатор клиента), а затем в другой таблице передать идентификатор клиента idcustomer, чтобы объединить две таблицы. Чтобы упростить это, я не возражаю, если эти вновь созданные идентификаторы находятся в одной таблице с новыми именами столбцов. Я могу по факту экспортировать их и импортировать их.

Вопрос на самом деле в том, как создать группу по имени клиента, дать этому клиенту и ID, а затем использовать тот же идентификатор в столбце для объединения.

Для описания схемы:

Я принял проект. База данных на данный момент представляет собой одну таблицу. В этой таблице:

persons name, address, childsname, description of child

Хотелось бы начать хотя бы с:

id_person, person name, childsname, childparent, description of child.

Идентификатор человека и ребенка должен быть одинаковым. Когда я разбиваю таблицу и помещаю дочернюю информацию в дочернюю таблицу, у ребенка будет родительский идентификатор.

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

Примером пары строк будет:

person_name, address, childsname, description

mark twain, 23 st., Buckweat, short smart kid

mark twain, 23 st., Daniel, short kinda smart

Вместо этого я хотел бы иметь 2 стола, один для родителей, а другой - для их детей.

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

Я планировал создать несколько таблиц с объединением.

Исходная база данных не имеет индекса или уникального идентификатора.

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

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

1 Ответ

1 голос
/ 27 апреля 2011

Для создания необходимой вам таблицы вы можете использовать временную таблицу, в которую вы будете вставлять все родительские имена и присваивать им идентификаторы.Затем вы можете обновить существующую таблицу:

CREATE TABLE name_to_id (
`id` INT(11) AUTO_INCREMENT,
`name` VARCHAR(256),
PRIMARY KEY (`id`));

INSERT INTO name_to_id (name)
SELECT DISTINCT name FROM my_table;

ALTER TABLE my_table
ADD COLUMN id INT(11) FIRST,
ADD COLUMN parent_id INT(11) AFTER childsname;

UPDATE my_table t
JOIN name_to_id n ON t.name = n.name
SET t.id = n.id, t.parent_id = n.id;

Чтобы создать родительские и дочерние таблицы, вы можете использовать:

CREATE TABLE parents AS
SELECT id, name, address FROM my_table
GROUP BY id;

CREATE TABLE children AS
SELECT childsname, parent_id, description
FROM my_table;

Возможно, вы захотите изменить эти таблицы позже, чтобы добавитьпервичные ключи и другие необходимые индексы.

...