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