Как Вы определяете PID родителя процесса

Если вам нужно количество статей для пользователя и общее количество комментариев ко всем статьям пользователя, то это ваш запрос:

SELECT
    u.id,
    u.username,
    COUNT(DISTINCT a.id) AS total_articles,
    COUNT(c.id) AS total_comments
FROM users u
LEFT JOIN articles a 
    ON u.id = a.user_id
LEFT JOIN comments c 
    ON a.id = c.article_id
GROUP BY
    u.id,
    u.username;

Но - если вы ищите количество комментариев (просто мысль здесь) пользователя - тогда вы хотите присоединиться к таблице комментариев по идентификатору пользователя, а не по идентификатору статьи.

15
задан ricree 7 August 2008 в 01:54
поделиться

4 ответа

Необходимо передать сам () ребенку как один из аргументов функции записи.

spawn_link(?MODULE, child, [self()]).
14
ответ дан 1 December 2019 в 03:35
поделиться

ответ @Eridius' является предпочтительным способом сделать это. Требование, чтобы процесс зарегистрировал имя, может иметь непреднамеренные побочные эффекты, такие как увеличение видимости процесса не говоря уже о стычке предложения уникальных имен, когда у Вас есть много процессов.

4
ответ дан 1 December 2019 в 03:35
поделиться

Можно использовать регистр BIF для предоставления порождения / родительский процесс, который имя (атом) затем вернуло для доработки в зарегистрированное имя от других процессов.

FUNC ()->

%% Сделайте что-то
%% Затем отправьте сообщение для порождения
родитель! СООБЩЕНИЕ.

...

регистр (родитель, сам ()),
икра (МОДУЛЬ, FUNC, [ARGS]).

Посмотрите начало работы с Erlang §3.3 и справочником Erlang §10.3.

0
ответ дан 1 December 2019 в 03:35
поделиться

Лучше всего передать его в качестве аргумента функции, вызываемой для запуска дочернего процесса. Если вы создаете забавы, что обычно является хорошим делом, будьте осторожны, выполняя:

spawn_link(fun () -> child(self()) end)

, который НЕ будет работать так, как вы планировали. (Подсказка: когда вызывается self ())

Как правило, вам следует избегать регистрации процесса, т.е. давать ему глобальное имя, если вы действительно не хотите, чтобы он был известен во всем мире. Создание веселья означает, что вам не нужно экспортировать созданную функцию, так как обычно следует избегать экспорта функций, которые не предназначены для вызова из других модулей.

3
ответ дан 1 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

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