Задать вопрос

Как записывать рефералов в БД по счетчику?

Доброго времени суток!

В общем имеется структура БД "Материализованный путь (Materialized Path)" для РЕФЕРАЛЬНОЙ системы
55c36b37b77a5d3c8e23b66fd53cd807.gif

Записи в БД идут следующим запросом:
CREATE TABLE mp_tree (
    `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(50) NOT NULL,
    `path` VARCHAR(100) NOT NULL
) TYPE=InnoDB DEFAULT CHARSET=utf8;

CREATE INDEX mpp_idx ON mp_tree (`path`);

INSERT INTO mp_tree VALUES
    (1, 'FOOD', '1'),
    (2, 'VEGETABLE', '1.1'),
    (3, 'POTATO', '1.1.1'),
    (4, 'TOMATO', '1.1.2'),
    (5, 'FRUIT', '1.2'),
    (6, 'APPLE', '1.2.1'),
    (7, 'BANANA', '1.2.2');


Вопрос: каким запросом SQL или функцией PHP можно делать запись в БД, если использовать регистрацию. Т.е. человек пришел на сайт, заполнил форму, указал логин того, кто пригласил (или по ссылке) и после отправки формы записался в БД под пригласившим?

Помогите, люди добрые. 3 недели ищу. Напишите как или ткните носом.
Заранее спасибо.
Успехов Вам!

P.S. Используется материал с Хабры
  • Вопрос задан
  • 411 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
petermzg
@petermzg
Самый лучший программист
А зачем записываться за пригласившим?
Добавьте в таблицу пользователей поле указывающее на пригласившего.
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Родители по id пользователя:
SELECT `t2`.`name`
    FROM `mp_tree` AS `t1`
    JOIN `mp_tree` AS `t2`
        ON `t1`.`path` LIKE CONCAT(`t2`.`path`, '.%')
    WHERE `t1`.`id` = :id
    ORDER BY `t2`.`path` DESC

Родители по path пользователя:
SELECT `name`
    FROM `mp_tree`
    WHERE :path LIKE CONCAT(`path`, '.%')
    ORDER BY `path` DESC

Индекс использоваться не будет, поскольку `path` используется внутри функции.
Я бы сделал на Nested Set, там вставка будет работать дольше, но выборка быстрее.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы