2017-01-27 2 views
0

Как я могу вернуть счетчик строк из запроса в этой хранимой процедуре? Я пытаюсь реализовать решения, найденные в других столбцах переполнения стека, которые похожи, но каждый результат на выходе является столбцом с подсчетом для каждой отдельной записи. (То есть, один столбец будет выводить 1,1,1,1,1 для каждой строки ...)Возврат ROW COUNT из хранимой процедуры в MySQL (MariaDB)

CREATE PROCEDURE stored_proc() 
BEGIN 
    SET @start_date = LAST_DAY(NOW() - INTERVAL 2 MONTH) + INTERVAL 1 DAY; 
    SET @end_date = LAST_DAY(NOW() - INTERVAL 1 MONTH); 

    SELECT users.*, count(DISTINCT mr_rev.id) AS prev_reg 
    FROM users 
     INNER JOIN gr_user_group 
      ON  gr_user_group.user_id = wp_users.ID 
       AND gr_user_group.group_id != 22 
       AND gr_user_group.group_id = 5 
     INNER JOIN usermeta ON users.ID = usermeta.user_id 
     INNER JOIN mr_rev 
      ON users.ID = mr_rev.users_id AND mr_rev.mr_rev_types_id = 2 
     INNER JOIN mr_rev mrr 
      ON  users.ID = mrr.users_id 
       AND mrr.mr_rev_types_id = 2 
       AND mrr.created_on >= @start_date 
       AND mrr.created_on <= @end_date 
     INNER JOIN mr_revs_meta 
      ON  mr_rev.id = mr_revs_meta.mr_rev_id 
       AND mr_revs_meta.meta_value > @end_date 
       AND mr_revs_meta.created_at < @end_date 
    WHERE users.ID NOT IN ('101', '102') 
    GROUP BY users.ID 
    HAVING prev_reg > 15; 
END; 

Есть эффективный способ возврата рассчитывать общий ряд?

EDIT: Return count in Stored Procedure Один из сообщений, которые я безуспешно выполнил.

+0

, если вы находитесь в SQL сервере @@ ROWCOUNT даст –

+0

OUTPUT да гряду с SQL Server, но я сейчас в основном с использованием MySQL, начал о две недели назад! Это сообщение касалось mysql как помечено выше. – choloboy

+0

Я говорю в контексте этого вопроса, работает ли он на SQL Server или MysQL? –

ответ

1

Как насчет обертывание запроса в другое выберите:

SELECT COUNT(*) FROM 
    (SELECT users.*, count(DISTINCT mr_rev.id) AS prev_reg 
     FROM users 
      INNER JOIN gr_user_group 
       ON  gr_user_group.user_id = wp_users.ID 
        AND gr_user_group.group_id != 22 
        AND gr_user_group.group_id = 5 
      INNER JOIN usermeta ON users.ID = usermeta.user_id 
      INNER JOIN mr_rev 
       ON users.ID = mr_rev.users_id AND mr_rev.mr_rev_types_id = 2 
      INNER JOIN mr_rev mrr 
       ON  users.ID = mrr.users_id 
        AND mrr.mr_rev_types_id = 2 
        AND mrr.created_on >= @start_date 
        AND mrr.created_on <= @end_date 
      INNER JOIN mr_revs_meta 
       ON  mr_rev.id = mr_revs_meta.mr_rev_id 
        AND mr_revs_meta.meta_value > @end_date 
        AND mr_revs_meta.created_at < @end_date 
     WHERE users.ID NOT IN ('101', '102') 
     GROUP BY users.ID 
     HAVING prev_reg > 15) a; 
+0

это сработало! большое спасибо! это самый эффективный способ (из любопытства)? – choloboy

+1

Возможно, это лучший способ сделать это, но у меня не хватает информации, чтобы ответить на этот вопрос. Anway, если вы считаете, что этот ответ решил вашу проблему, не могли бы вы принять этот ответ? –