Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Доброго времени суток!
Подскажите пожалуйста как узнать количество записей в цикле или запросом сразу можно как то определить.
Есть таблица users примерно такого вида
id
parent - хранить id и мне надо пройти по всем записям где id=3 потом взять id где равен 3 и пройти дальше.
Пример:
на скрине таблица http://joxi.ru/12M08Z6CgZ3dqm если брать пример где paren=3
получится запрос
User::where('parent', '=', Auth::user()->id)->count();
Сейчас надо от этих записей пройти дальше и в результате выдать общее количество
Не в сети
Друг, чтобы программировать надо научиться вопросы задавать внятно. Я несколько раз перечитывал и не понял в чем затруднение. Вот это просто шедевр:
где id=3 потом взять id где равен 3 и пройти дальше.
куда тебе надо пойти?
Общее количество записей добывается если убрать условие where(), оставить только count()
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
пройти по связанным id надо. скрин я не просто так приложил. А чтобы наглядно было. В parent хранится значение id того человека по чей ссылке была регистрация
например по ссылке от id=1 прошла регистрация второго юзера, его parent=1
потом от id=2 прошла регистрация третьего юзера, его paren=2
а юзер c id=1 должен видеть всех их тк цепочка началась от его id
Не в сети
Это называется дерево ))) А отношения между пользователями такие обычно при участии в реферальной программе. Но ничего этого не прозвучало )))
Есть несколько эффективных методов хранения древовидных структур - Nested Sets, Materialized (или Storing) Paths, Closure Tables... они позволяют в один запрос к базе получить количество дочерних узлов или добыть сами узлы.
А для id - parent_id (т.н. Adjacency List), такое невозможно. Теперь ты знаешь какие слова гуглить.
Не за что!
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Например если хранить путь как это принято в Materialized Paths, это будет очень похоже на оглавление в книге.
Я здесь оставил поле parent_id только чтобы тебе было понятнее как они между собой связаны. Для технологии это MP не нужно.
id parent_id path
-- --------- ----
1 null '1.'
2 1 '1.1.'
3 1 '1.2.'
4 2 '1.1.1.'
5 4 '1.1.1.1.'
. . .
Запрос посчитает количество дочерних узлов для id=2 (+1 т.к. сам узел тоже посчитан)
SELECT COUNT(*)
FROM users
WHERE path LIKE '1.1.%'
Изменено artoodetoo (14.02.2023 12:59:16)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
то есть получается логика следующая. В path пишем id юзера от которого проходит регистрация + id юзера который проходит регистрацию?
так?
id parent_id path
-- --------- ----
1 null '1.'
2 1 '1.1.'
3 2 '1.2.'
Изменено kull88 (15.02.2023 05:12:49)
Не в сети
Нет, про копирование id в path речи не было. Но ты можешь попробовать это.
Уже пора пробовать, @kull88, давай дальше сам.
Изменено artoodetoo (15.02.2023 07:43:12)
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Если речь о подсчёте приглашённых, то думаю запрос должен быть типа:
select m.id, m.name, count(ref.name)
from man m left join man ref on m.id = ref.parent
group by m.id, m.name
Изменено OzzyOsbourne (14.03.2023 08:07:55)
Не в сети
Страницы 1