Jump to content
Fivewin Brasil

For Select em Mysql na procedure


Carlos Pimentel

Recommended Posts

Bom dia.

Estou tentando fazer um "For Select" em MySql porém não estou entendendo o que esta errado no meu comando, poderiam me ajudar por favor ?

Eu tenho uma tabela no qual é salvo as informações de respostas todas na mesma coluna referenciando o ID da tabela de pergunta... no entanto eu preciso que cada resposta seja exibida em sua respectiva coluna de pergunta. Desta forma estou tentando criar uma procedure que execute um for Select e para cada registro retornado deve ser salvo em uma variável diferente... para isso utilizei um contador para saber em qual variável deve ser salvo a informação retornada.
Segue imagem da Tabela no qual preciso executar o For Select:

image.png.507072f8c8dffd85125d67abd09983ce.png

Segue minha procedure:
 

 
DROP procedure IF EXISTS `retorna_preco_concorrente`;
 
DELIMITER $$
CREATE DEFINER=`glpi`@`localhost` PROCEDURE `retorna_preco_concorrente`(
IN
nome_concorrente           VARCHAR(100),
familia_produto                 VARCHAR(100),
preco_s_ipi                VARCHAR(100),
preco_c_ipi                   VARCHAR(100),
prazo                          VARCHAR(100),
icms                                VARCHAR(10),
reg                                INT,
quest                                INT,
resp                                VARCHAR(100)
)

BEGIN
    
    set reg = 0;
    
    For Select r.plugin_formcreator_formanswers_id, r.plugin_formcreator_questions_id ,r.answer from glpi_plugin_formcreator_answers r order by r.plugin_formcreator_formanswers_id, r.plugin_formcreator_questions_id
        Into reg, quest, resp
    Do
        Begin        
        
            IF(reg = 0) then 
                begin
                    set nome_concorrente = resp;                                    
                end
            ELSEIF(reg = 1) then
                begin
                    set familia_produto = resp;                                    
                end
            ELSEIF(reg = 2) then
                begin
                    set preco_s_ipi = resp;                                    
                end 
            ELSEIF(reg = 3) then
                begin
                    set preco_c_ipi = resp;                                    
                end 
            ELSEIF(reg = 4) then
                begin
                    set prazo = resp;                                    
                end     
            ELSEIF(reg = 5) then
                begin
                    set icms = resp;                                    
                end                
            END IF;
            Set reg = reg+1;
            IF(reg > 5) then 
                begin 
                    suspend;
                end 
        End              
END;$$
 
DELIMITER ;

OBS não tenho muita pratica com Mysql.

Link to comment
Share on other sites

9 minutos atrás, emotta disse:

pq vc nao faz um select com inner join? caso não saiba montar passe aqui a estrutura da tabela de pergunta e a de resposta e eu rascunho pra vc

Eu montei um select com inner join, e ficou da seguinte forma o resultado:image.thumb.png.0d38a89bd017fc228357e739d00c68d1.png

porém eu preciso transformar as minhas perguntas em colunas, e minhas respostas em linhas de acordo com sua respectiva coluna:
Segue relacionamento entre as tabelas:
image.thumb.png.f64294804dcf68924d6eac134ff9b4f1.png

Link to comment
Share on other sites

Preciso transformar as linhas da tabela de "Perguntas" em colunas. Para que eu possa jogar as "Repostas" nas linhas...

Se olharmos na imagem abaixo na coluna em vermelho as perguntas são repetidas:

image.png.a96e9ac0d705d3f1938cd2c860769717.png

O meu objetivo é que as informações de perguntas não se repitam... e sim vire colunas... sendo exibidos seus respectivos resultados logo abaixo.

Na tabela de "Resposta" existe um join com a tabela de pergunta, então para cada "Resposta" existente o vinculo com a "Pergunta" através do ID.

Exemplo:

Tabela Pergunta:                                                                                 

  • ID_Pergunta
  • Concorrente
  • Família
  • preço_s_ipi
  • preço_c_ipi
  • prazo
  • icms

Tabela Resposta:

  • ID _Resposta
  • ID_Pergunta (FK)
  • Resposta

ou seja, para cada linha de resposta existente é feito um vinculo com determinada pergunta... caso as 6 perguntas forem respondidas na tabela resposta existirá 6 respostas com vinculo a sua determinada pergunta...

Meu objetivo é construir uma procedure no qual eu consiga transformar as perguntas em colunas:

Concorrente | família | preço_s_ipi | preço_c_ipi | prazo | icms

E a cada linha ir colocando a resposta:

Concorrente |     família         | preço_s_ipi        | preço_c_ipi    | prazo              | icms

 Resp. Conc  |    Resp Fam     | Resp Vr               |  Resp Var       | Resp Prazo   | Resp ICMS

 

Link to comment
Share on other sites

Pelo que entendi você precisará tratar isso no programa, o SQL não vai conseguir colocar em colunas pra você isso, pelo menos não se uma maneira simples. 

 

Então basicamente você precisa obter os dados do SQL e ai na sua aplicação você tratar como você precisa. Acredito que seja esse o caminho.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...