Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тестовая таблица id parent_id / 12 сообщений из 12, страница 1 из 1
09.03.2016, 00:38:25
    #39187729
Тестовая таблица id parent_id
Подскажите может кто делал или возможно есть инструменты для генерации таблицы
Колонки id и parent_id
Структура дерево
Вложенность 3-6
Количество строк 10к-100к

Если кто-то делал или может выгрузить из готового дерева буду признателен.
Заранее спасибо.
...
Рейтинг: 0 / 0
09.03.2016, 07:16:39
    #39187767
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
Николай Жуковинструменты для генерации таблицыdevart'овский посмотрите. Не знаю, правда, есть там деревья или нет, но скорее всего есть.
...
Рейтинг: 0 / 0
09.03.2016, 08:34:37
    #39187802
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
что за лень... )))
N-вложенность, за счет разброса значений получите примерно все нормально, нежели искать таблицу "цифирек"
Код: sql
1.
2.
3.
4.
SELECT 
  ROUND(RAND()*( N -1)+1,0) as id, 
  ROUND(RAND()*( N -1)+1,0) as parent_id   
FROM (select 1 from БОЛЬШАЯ_ТАБЛИЦА_НА_10к-100к) as psevdo_big_table
...
Рейтинг: 0 / 0
09.03.2016, 08:41:34
    #39187804
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
.... это всего лишь пример для размышлений...
...
Рейтинг: 0 / 0
09.03.2016, 09:50:18
    #39187847
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
Alex_Ustinov
Код: sql
1.
 ROUND(RAND()*( N -1)+1,0) as id, 

А это зачем? там обычного автоинкремента достаточно будет.
...
Рейтинг: 0 / 0
09.03.2016, 10:28:52
    #39187871
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
пытался только натолкнуть на мысль... поспешил конечно...
при использовании автоинкремента могут быть пробелы, где то проскакивало... т.е.
insert my_table (id_autoincrement) select ....
не всегда даст сплошное множество id_autoincrement, а нам нужно знать диапазон для след.уровня
по уму лучше использовать статическую генерацию ID, типа
заполнили первый уровень
Код: sql
1.
2.
insert into my_tab (id, id_parent) 
SELECT @a:=@a+1 as rownum,  0  from (select @a:= 0 ) as t, (SELECT 1 FROM big_table LIMIT  N )as tt/*N- количество первого уровня*/


далее продолжаем нумерацию и генерим ID_PARENT из известного диапазона, в RAND() контролируем диапазон генерации, LIMIT-ом ограничиваем кол-во элементов уровня.... и так далее )) 3-6 раз
...
Рейтинг: 0 / 0
09.03.2016, 10:33:13
    #39187872
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
Alex_Ustinovпри использовании автоинкремента могут быть пробелы, где то проскакивало... т.е.
insert my_table (id_autoincrement) select ....
не всегда даст сплошное множество id_autoincrementДумаю, тут это можно проигнорировать, т.к. одиночный INSERT и с таблицей пока еще никто не работает (в том смысле, что нет конкурентных INSERT-ов).
...
Рейтинг: 0 / 0
09.03.2016, 10:41:00
    #39187878
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
miksoft,

ну это я уже так... нахлобучил из того что в голове вспомнилось....
...
Рейтинг: 0 / 0
09.03.2016, 23:11:03
    #39188670
Тестовая таблица id parent_id
Допустим
Заполнил я таблицу вот так
Код: sql
1.
2.
3.
4.
5.
6.
INSERT INTO `test`(`id`, `parent_id`) 
SELECT 
  ROUND(RAND()*(10000-1)+1,0) as id, 
  ROUND(RAND()*(10000-1)+1,0) as parent_id   
FROM ТАБЛИЦА_4.6М AS si
WHERE si.ID<20000


Да имею 19999 записей
Предостаточно но есть дубли
То есть Уникальный индекс на Пару `id`, `parent_id` не прилепить
Да и закисленность встречается
...
Рейтинг: 0 / 0
09.03.2016, 23:36:54
    #39188690
Тестовая таблица id parent_id
Николай ЖуковДа и закисленность встречается
зацикленость
...
Рейтинг: 0 / 0
10.03.2016, 08:36:18
    #39188738
Alex_Ustinov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
Николай Жуков,

miksoft поправил мой НЕправильный вариант
id делаете автоикремент
заполняете первый уровень, допустим 1000 элементов
затем второй уровень
Код: sql
1.
2.
3.
4.
5.
INSERT INTO `test`(`parent_id`)
SELECT 
  /*ROUND(RAND()*( N -1)+1,0) as id, ---  это НЕ НАДО */
  ROUND(RAND()*( N -1)+1,0) as parent_id   /**N=1000 кол-во пред уровня/
FROM (select 1 from БОЛЬШАЯ_ТАБЛИЦА_НА_10к-100к LIMIT KKK) as psevdo_big_table

для заполнения следующего уровня в RAND() используете KKKK и N для генерации parent_id предыдущего уровня......дело техники...
...
Рейтинг: 0 / 0
18.03.2016, 09:48:55
    #39195093
Arhat109
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Тестовая таблица id parent_id
В Факе есть пример вот такой моей процедуры создания тестовой таблицы простого дерева:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
# test(in integer search_num) {
BEGIN

SET @C='Special create table for ver.2: with composed primary key';

DROP TABLE IF EXISTS `tree`;
CREATE TABLE IF NOT EXISTS `tree` (
   `level`     int(11)          NOT NULL
  ,`parent_id` int(11) unsigned NOT NULL
  ,`id`        int(11) unsigned NOT NULL # auto_increment
  ,`data`      varchar(255) character set 'utf8' default ''
  ,PRIMARY KEY  (`level`,`parent_id`,`id`)
#  ,UNIQUE KEY `id` (`id`) -- for autoincrement needs!
  ,KEY `parent_id` (`parent_id`)
  ,KEY `id`        (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

SET @C='Inserting tree into table';
SET @depth = 10;
SET @maxLevel = 300;

SET @level = 0;
REPEAT
  SET @d = 1;
  REPEAT
    INSERT INTO `tree` SET
        `level`     = @level
      , `parent_id` = @parent:=IF(@level=0, 0, @d + FLOOR( RAND()*@level*@depth ) )
      , `id`        = @d + @level * @depth
      , `data`      = CONCAT('data for parent = ',@parent)
    ;
    SET @d = @d + 1;
  UNTIL @d > @depth END REPEAT;
  SET @level = @level + 1;
UNTIL @level > @maxLevel END REPEAT;
COMMIT;


Раскомментарил кусок со случайным заполнением и там не совсем та структура таблички, но за основу взять вроду бы можно..
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Тестовая таблица id parent_id / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]