2016-05-10 2 views
0

Я получаю номер строки через инструкцию SQL в sqlyog, как следует;Номер строки с помощью хранимой процедуры

SET @v_num:=0; 
SET @v_type := 0; 

SELECT pd.event_id, 
     @v_num := IF(@v_type = pd.event_id, @v_num + 1, 1) AS row_number, 
     @v_type := pd.event_id AS dummy 
     ,CONCAT(va.id,',',va.`firstname`,',',va.`lastname`,',',IFNULL(va.`picture`,'')) user_info 
FROM p_details pd 
INNER JOIN vw_all va ON pd.pass_for = va.`user_type` AND pd.attendee_id = va.`id` AND va.`pass_id` = pd.id 
WHERE CURRENT_DATE() BETWEEN pd.start_date AND pd.end_date 
AND pd.event_id IN (9,50) 
ORDER BY pd.event_id,pd.last_date_time DESC 

Как вы знаете, мы не можем использовать @v и "@v_num: = IF (@v_type = pd.event_id, @v_num + 1, 1)" в хранимой процедуре. Поэтому я не могу получить номер строки с помощью хранимой процедуры mysql.

Любые идеи?

ответ

0

Почему, по вашему мнению, вы не можете использовать эту технику в хранимой процедуре? Просто оберните PROCEDURE заявление СОЗДАТЬ вокруг кода, как это:

CREATE PROCEDURE testRowNum() 
BEGIN 
SET @v_num:=0; 
SET @v_type := 0; 

SELECT pd.event_id, 
     @v_num := IF(@v_type = pd.event_id, @v_num + 1, 1) AS row_number, 
     @v_type := pd.event_id AS dummy 
     ,CONCAT(va.id,',',va.`firstname`,',',va.`lastname`,',',IFNULL(va.`picture`,'')) user_info 
FROM p_details pd 
WHERE Something = 'SomeValue'; 
END; 

И ваш хорошо идти уже.

+0

Теперь работает нормально, но его повторять тот же номер строки (только повторяющиеся строки номер 1) и его показ только строки номер 1 дважды против каждой event_id –

+0

К сожалению, я не могу» т воспроизвести это. Я создал небольшой образец, основанный на вашем коде, и он работает, как ожидалось. - Но это что-то, что изменилось с использованием вашего кода в хранимом процессе? - Наверное, нет. – PhilS

+0

Ничего не изменилось. –

1

Повторяющиеся значения фиксированных через эту команду:

SELECT tt.event_id, 
     @num := IF(@type = tt.event_id, @num + 1, 1) AS row_number, 
     @type := tt.event_id AS dummy, 
     tt.info user_info 
FROM (
    SELECT pd.event_id 
      ,CONCAT(va.id,',',va.`firstname`,',',va.`lastname`,',',IFNULL(va.`picture`,'')) info 
    FROM p_details pd 
    INNER JOIN vw_all va ON pd.pass_for = va.`user_type` AND pd.attendee_id = va.`id` AND va.`pass_id` = pd.id 
    WHERE CURRENT_DATE() BETWEEN pd.start_date AND pd.end_date 
    AND pd.last_date_time IS NOT NULL 
    ORDER BY pd.event_id,pd.last_date_time DESC 
    )tt 
Смежные вопросы