172 похожих чатов

SELECT u1.id, u1.parent_id, 0 as referrals FROM users u1 WHERE

parent_id != 0
UNION
SELECT u.id, u.parent_id, rf.id as referrals
FROM referral rf, users u
WHERE rf.parent_id = u.id
)
select * from referral

о, я сделал такое, но появилась проблема что родитель у которого много детей, появляется в запросе много раз, что логично, UNION решал это, но сейчас как появилось поле referrals, логично что не работает, можно как то этот referrals сгрупировать в массив?

20 ответов

23 просмотра
🌑- Автор вопроса

Нет,нету. Просто два поля, Id и parent_Id, любой юзер ссылается на parent_id, если он есть, если нету то parent_id = 0, а что не так в моем коде? Почему вы сказали про моделб

🌑- Автор вопроса

Структуру я хотел сделать такую, что будет id, и его referrals, referrals массив из всех юзеров у которых parent_id = id, а дальше если и у них есть дети, то они будут в выборке тоже как родители с их referrals, по сути выборка которуюя сделал,но referrals сделать массивом и обьединить

🌑
Нет,нету. Просто два поля, Id и parent_Id, любой ю...

Не так то, что она не консистентная — возможны ссылки на несуществующих пользователей (да и пользователя с id = 0 на самом деле не существует). Некачественная модель, короче. ;)

🌑- Автор вопроса
Yaroslav Schekin
Не так то, что она не консистентная — возможны ссы...

я бы сделал parent_id null, если его нет, но человек решил сделать 0)

🌑- Автор вопроса
Дмитрий Копытов
И теперь это невозможно исправить?

я не отвечаю вообще за базу, за бек, не в моих полномочиях короче)

🌑
Структуру я хотел сделать такую, что будет id, и е...

Я ничего не понял. :( Вы можете привести текстом адекватный пример данных и результата на этих данных? > но в топ парент находится сам он, с чем это может быть связано? С тем, что я считаю, что он и есть top_parent, и явно это написал в запросе. ;) > то они будут в выборке тоже как родители с их referrals Т.е. это всего один уровень для каждого родителя (тогда зачем тут rCTE)? Или я не так понял?

🌑
я бы сделал parent_id null, если его нет, но челов...

И получил "прекрасный" побочный эффект — теперь можно ссылаться на несуществующих пользователей. :(

🌑- Автор вопроса
Yaroslav Schekin
Я ничего не понял. :( Вы можете привести текстом а...

id parent_id 1 0 2 1 3 1 4 1 5 4 6 5 7 4 8 7 результатом будет id referrals 1 [2,3,4] 4 [5,7] 5 [6] 7 [8]

🌑- Автор вопроса
🌑
id parent_id 1 0 2 1 3 1 4 1 5 4 6 5 7 4 8 ...

и по сути для данной структуры уже не нужна рекурсия))), я просто понял что выборка такая будет легче и лучше, сначала я думал будет вложенность в глубь и там нужна была рекурсия, извините за потраченное время

🌑
id parent_id 1 0 2 1 3 1 4 1 5 4 6 5 7 4 8 ...

Так rCTE тут не нужно, вроде: SELECT u.id, array_agg(child.id ORDER BY child.id) AS referrals FROM users AS u JOIN users AS child ON child.parent_id = u.id WHERE EXISTS ( SELECT 1 FROM users AS ue WHERE ue.parent_id = u.id ) GROUP BY u.id;

🌑- Автор вопроса
Yaroslav Schekin
Так rCTE тут не нужно, вроде: SELECT u.id, array_a...

вот я о том же, просто понял что рекурсия нужна была бы если эта же структура шла в глубь, но это очень глупо и непрактично, спасибо за выборку!

🌑
а зачем where exists?

От предыдущего запроса осталось. ;)

🌑- Автор вопроса
Yaroslav Schekin
Так rCTE тут не нужно, вроде: SELECT u.id, array_a...

возник вопрос, если мне нужно будет добавить поле referrals_length в котором будет лежать количество рефераллов до n-ой глубины, то тут же уже нужна рекурсия?

🌑- Автор вопроса
Андрей Никитин
Если n константа, то нет

в плане? имеете ввиду что если n будет прокидываться снаружи, то рекурсия не нужна?

🌑
в плане? имеете ввиду что если n будет прокидывать...

Нет, если n - это число всегда постоянная и никогда не меняется, то рекурсия ненужна

В общем случае да. Если n — [небольшая] константа, то можно и "расписать" уровни вручную вместо рекурсии... но зачем, казалось бы? ;)

🌑- Автор вопроса
Yaroslav Schekin
В общем случае да. Если n — [небольшая] константа,...

понял, спасибо, пойду пробовать написать

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта