2017-04-15 20 views
0

有没有办法增加这个计数器但不显示在结果中?在我提交此问题之前,我需要添加更多文本。如何在MySQL中增加一个计数器select但不显示(隐藏)它在结果中

SET @counter = 0; 

    SELECT 
     @counter:[email protected] + 1 AS newindex, -- increment the counter that is in the header 
     survey_report.id, 
     survey_report.survey_row_id as respondent_id, -- the id that copied from the survey table 
     survey_report.qid, 
     question, 
     IF(type IN ('S' , 'K'), 
     (SELECT answer 
      FROM survey_report 
      WHERE qid NOT IN (SELECT qid FROM survey_answers) 
      AND survey_questions.language = lang 
        AND survey_report.id = @counter), 
     (SELECT answer 
      FROM survey_answers 
      WHERE survey_questions.qid = survey_answers.qid 
        AND survey_report.qid = survey_questions.qid 
        AND survey_report.answer = survey_answers.code 
        AND survey_answers.language = lang 
      ) 
     ) AS answer 
     FROM survey_questions 
      JOIN survey_report ON survey_report.qid = survey_questions.qid 
      WHERE survey_questions.sid = survey_id 
      ORDER BY survey_report.survey_row_id, survey_report.id; 

回答

0

你总是可以包你当前的查询作为子查询,并只需选择你想要的列:

SET @counter = 0; 

SELECT 
    t.id, 
    t.respondent_id, 
    t.qid, 
    t.question, 
    t.answer 
FROM 
(
    SELECT 
     @counter:[email protected] + 1, 
     survey_report.id, 
     survey_report.survey_row_id as respondent_id, 
     survey_report.qid, 
     question, 
     ... 
    FROM survey_questions 
    INNER JOIN survey_report 
     ON survey_report.qid = survey_questions.qid 
    WHERE survey_questions.sid = survey_id 
) t 
ORDER BY t.respondent_id, 
     t.id; 
0

首先,你可以把初始化在同一个查询。隐藏你可以使用这个技巧的计数器。

SELECT 
     IF(survey_report.id = (@counter := (@counter:[email protected]+1)),survey_report.id,survey_report.id) as id 
     survey_report.survey_row_id as respondent_id, -- the id that copied from the survey table 
     survey_report.qid, 
     question, 
     IF(type IN ('S' , 'K'), 
     (SELECT answer 
      FROM survey_report 
      WHERE qid NOT IN (SELECT qid FROM survey_answers) 
      AND survey_questions.language = lang 
        AND survey_report.id = @counter), 
     (SELECT answer 
      FROM survey_answers 
      WHERE survey_questions.qid = survey_answers.qid 
        AND survey_report.qid = survey_questions.qid 
        AND survey_report.answer = survey_answers.code 
        AND survey_answers.language = lang 
      ) 
     ) AS answer 
    FROM survey_questions 
    JOIN survey_report ON survey_report.qid = survey_questions.qid 
    CROSS JOIN (SELECT @counter := 0) AS init 
    WHERE survey_questions.sid = survey_id 
    ORDER BY survey_report.survey_row_id, survey_report.id;