группа mysql по установленному идентификатору

#mysql #join #group-by

#mysql #Присоединиться #группа по

Вопрос:

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

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

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

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

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

 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. Не могли бы вы предоставить более подробную информацию? Какова ваша фактическая табличная схема и какова желаемая схема? Какой результат вы хотите запросить? Не могли бы вы привести нам пример?

2. я попытался добавить больше деталей. спасибо за ваше время.

Ответ №1:

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

 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;
  

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

Комментарии:

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