Перепробовав несколько возможностей, я остановился. Не перегружая сервер mysql сотнями запросов, я пытаюсь достичь этого:
Вот таблица
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`firstname` varchar(64) NOT NULL,
`lastname` varchar(64) NOT NULL,
`email` varchar(64) NOT NULL,
`status` smallint(5) NOT NULL,
`refchid1` int(11) NOT NULL,
`refchid2` int(11) NOT NULL,
`refchid3` int(11) NOT NULL,
`refchid4` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
Пояснение:
- Я пытаюсь настроить статус человека на основе сложного дерева. У каждого пользователя есть идентификатор, обозначенный в поле идентификатора auto_increment.
- Пользователь A вводит свои данные в таблицу.
- Пользователь B упоминается пользователем A, поэтому при вводе его данных refchid1 имеет тот же идентификатор, что и пользователь A.
- Пользователь C упоминается пользователем B, его refchid1 становится идентификатором пользователя B, а его refchid2 становится идентификатором пользователя A.
- Пользователь D ссылается на пользователя C, его refchid1 становится таковым для пользователя C, refchid2 - для пользователя B, а refchid3 - для пользователя A.
Если вы понимаете ссылки на вышесказанное, вы на правильном пути.
Пример данных приведенного выше описания:
(6, 'Lars', 'Luna', 'Morbi.non.sapien@enimgravida.com', 25, 0, 0, 0, 0),
(7, 'Sonya', 'Cox', 'tellus@orci.org', 25, 6, 0, 0, 0),
(8, 'Aiko', 'Hodge', 'vestibulum.neque.sed@vel.edu', 25, 7, 6, 0, 0),
(9, 'Lillith', 'Bray', 'purus.Duis.elementum@necurnasuscipit.org', 25, 8, 7, 6, 0),
(10, 'Macey', 'Hayes', 'mi.pede@aliquetodioEtiam.net', 25, 9, 8, 7, 6);
Что я пытаюсь сделать, это:
- Статус по умолчанию - 25. (25,28,30,35,40). В основном это система скидок, где чем больше людей вы ссылаетесь и чем больше людей ссылаются на вас, где вы являетесь исходным реферером, тем больше вы получаете скидки.
- Если у пользователя А есть как минимум 10 уникальных пользователей, на которых он ссылается как refchid1, он получает статус.
- Если у пользователя A есть как минимум 10 уникальных пользователей в refchid1, каждый из которых по очереди имеет 10 уникальных пользователей в refchid1, где пользователь A является refchid2, он получает статус.
- Пользователь A имеет 10 уникальных пользователей в rechid1, каждый из которых имеет 10 уникальных пользователей в refchid1, где пользователь A - это rechid2, которые в свою очередь имеют 10 уникальных пользователей в refchid1, где пользователь A - это refchid3.
- и т.д.
Как уже говорилось, структура тестирования сложна, и я хочу сделать это, не перегружая сервер mysql миллионами запросов. Запрос должен быть запросом ОБНОВЛЕНИЯ, который будет корректировать статус всех соответствующих пользователей.
У кого-нибудь есть решение о том, как я собираюсь это сделать?