Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 15.01.2023 16:34:19

Надо узнать количество записей

Доброго времени суток!
Подскажите пожалуйста как узнать количество записей в цикле или запросом сразу можно как то определить.

Есть таблица users примерно такого вида
id
parent - хранить id и мне надо пройти по всем записям где id=3 потом взять id где равен 3 и пройти дальше.

Пример:
на скрине таблица http://joxi.ru/12M08Z6CgZ3dqm если брать пример где paren=3

получится запрос

User::where('parent', '=', Auth::user()->id)->count();

Сейчас надо от этих записей пройти дальше и в результате выдать общее количество

Не в сети

#2 29.01.2023 14:18:56

Re: Надо узнать количество записей

Друг, чтобы программировать надо научиться вопросы задавать внятно. Я несколько раз перечитывал и не понял в чем затруднение. Вот это просто шедевр:

где id=3 потом взять id где равен 3 и пройти дальше.

куда тебе надо пойти?

Общее количество записей добывается если убрать условие where(), оставить только count()


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 14.02.2023 11:54:32

Re: Надо узнать количество записей

пройти по связанным id надо. скрин я не просто так приложил. А чтобы наглядно было. В parent хранится значение id того человека по чей ссылке была регистрация

например по ссылке от id=1 прошла регистрация второго юзера, его parent=1
потом от id=2 прошла регистрация третьего юзера, его paren=2

а юзер c id=1 должен видеть всех их тк цепочка началась от его id

Не в сети

#4 14.02.2023 12:33:41

Re: Надо узнать количество записей

Это называется дерево ))) А отношения между пользователями такие обычно при участии в реферальной программе. Но ничего этого не прозвучало )))

Есть несколько эффективных методов хранения древовидных структур - 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.

Не в сети

#5 14.02.2023 12:58:03

Re: Надо узнать количество записей

Например если хранить путь как это принято в 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.

Не в сети

#6 15.02.2023 05:09:31

Re: Надо узнать количество записей

то есть получается логика следующая. В 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)

Не в сети

#7 15.02.2023 07:16:51

Re: Надо узнать количество записей

Нет, про копирование 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.

Не в сети

#8 14.03.2023 08:07:34

Re: Надо узнать количество записей

Если речь о подсчёте приглашённых, то думаю запрос должен быть типа:

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)

Не в сети

Подвал раздела