Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ricardofrr

Juntar resultado em uma procedure

Recommended Posts

Boa Tarde!

 

gostaria de saber se é possivel usar algo como o "union" para colocar no mesmo resultado de uma pesquisa de duas ou mais Querys, dentro de uma stored procedure e se ainda é possivel usa-lo dentro de um while

 

o código q estou tentando implementar é esse, indepedente das querys, cada bloco IF deve retornar uma linha, eu preciso q retorne duas linhas, um de cada bloco IF:

 

DELIMITER $$

DROP PROCEDURE IF EXISTS `tabela`.`gethome` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `gethome`()
BEGIN
	 DECLARE pos INTEGER(1) DEFAULT 3;
	 DECLARE flag1 INTEGER DEFAULT (SELECT count(*) FROM home WHERE homData BETWEEN now() AND (SELECT min(homData) FROM home WHERE homData > now()) AND homPos = pos ORDER BY homData ASC);
	 DECLARE flag3 INTEGER DEFAULT (SELECT count(*) FROM home WHERE homData BETWEEN now() AND (SELECT min(homData) FROM home WHERE homData > now()) AND homPos = 3 ORDER BY homData ASC);


	 IF (flag1=0) THEN
		  SELECT * FROM home,noticias,editoriais WHERE home.not_id = noticias.not_id AND noticias.edi_id = editoriais.edi_id AND homPos = pos ORDER BY home.homData DESC LIMIT 1;
	 ELSE
		   SELECT * FROM home,noticias,editoriais WHERE home.not_id = noticias.not_id AND noticias.edi_id = editoriais.edi_id AND home.homData between now() AND (SELECT min(homData) FROM home WHERE homData > now()) AND homPos = pos ORDER BY home.homData ASC;
	 END IF;
	 SET pos = pos +2;

	 IF (flag3=0) THEN
		  SELECT * FROM home,noticias,editoriais WHERE home.not_id = noticias.not_id AND noticias.edi_id = editoriais.edi_id AND homPos = pos ORDER BY home.homData DESC LIMIT 1;
	 ELSE
		   SELECT * FROM home,noticias,editoriais WHERE home.not_id = noticias.not_id AND noticias.edi_id = editoriais.edi_id AND home.homData between now() AND (SELECT min(homData) FROM home WHERE homData > now()) AND homPos = pos ORDER BY home.homData ASC;
	 END IF;

END $$

DELIMITER;

obrigado pela atenção!

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi,

você pode 'montar' várias consultas e executá-la como uma utilizando UNION e PREPARE.

dá uma olhada nesta procedure:

DELIMITER $$

 

DROP PROCEDURE IF EXISTS `test`.`sp_teste`$$

 

CREATE

PROCEDURE `test`.`sp_teste`()

BEGIN

 

SET @consulta := '';

 

IF 1 = 1 THEN

SET @consulta := 'SELECT ''Primeiro Registro: CONDIÇÃO 1'' AS CAMPO';

ELSE

SET @consulta := 'SELECT ''Primeiro Registro: CONDIÇÃO 2'' AS CAMPO';

END IF;

 

IF 1 = 1 THEN

SET @consulta := CONCAT(@consulta, ' UNION ', 'SELECT ''Segundo Registro: CONDIÇÃO 1'' AS CAMPO');

ELSE

SET @consulta := CONCAT(@consulta, ' UNION ', 'SELECT ''Segundo Registro: CONDIÇÃO 2'' AS CAMPO');

END IF;

 

PREPARE stmt FROM @consulta;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

END$$

 

DELIMITER ;

retornou o seguinte:

CAMPO

Primeiro Registro: CONDIÇÃO 1

Segundo Registro: CONDIÇÃO 1

Mais informações na documentação http://dev.mysql.com/doc/refman/5.0/en/sql...statements.html.

Compartilhar este post


Link para o post
Compartilhar em outros sites

vlw cara, funciona!! =D

 

agora eu vou tentar fazer um while com ele, se o mysql tivesse uma jeito de criar arrays seria mais fácil, eu usaria pra criar um "flag[x]" nesse caso...

 

mas do jeito q tá já ajudou bastante, vlw mesmo!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o mysql tivesse uma jeito de criar arrays seria mais fácil

e como seria!! ehehe

já precisei várias vezes... :P

flw!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.