Ir para conteúdo

POWERED BY:

Arquivado

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

Maykel-ctba

Melhor jeito de apresentar os dados (join? sum?)

Recommended Posts

Fala galera.

 

Atualmente estou desenvolvendo um sistema de Pesquisa de satisfação, onde a pessoa tem 5 perguntas e para cada pergunta, uma nota de 1 a 5 para ser dada.

 

 

 

Tabela Pesquisa-resultados

  • conEntId (id da pessoa que votou)
  • pesId (id da pesquisa)
  • pesRespondida (ENUM - S/N)
  • pesQuestao01 (INT - 1 a 5 - que seria de ótimo a horrível)
  • pesQuestao02 (INT - 1 a 5 - que seria de ótimo a horrível)
  • pesQuestao03 (INT - 1 a 5 - que seria de ótimo a horrível)
  • pesQuestao04 (INT - 1 a 5 - que seria de ótimo a horrível)
  • pesQuestao05 (INT - 1 a 5 - que seria de ótimo a horrível)
  • pesComentarios (VARCHAR)

 

 

E preciso apresentar em forma de gráfico os resultados. Porém, estou encucado, não sei como apresentar isso de forma amigável. Tenho medo de ficar redundante o código.

 

Os resultados estão sendo gravados no banco da seguinte maneira:

 

capturadetela20130214as.png

 

 

Eu gostaria de apresentar um jeito que somasse quantas pessoas votaram por exemplo 1 na questão 1, 2 na questão 1, isso é possível?Porque quero selecionar estes dados e montar um gráfico de pizza com os resultados!

 

Join, sum, count, qual o melhor jeito?

Compartilhar este post


Link para o post
Compartilhar em outros sites

simples... mas vc já montou o banco de forma errada.. as vezes montar da forma certa... ajuda bastante no trabalho...

 

vc teria que ter criado...

 

tabela perguntas -> id / pergunta / teste

tabelas questoes -> id / pergunta_id / questao

tabela respostas -> id/ questao_id / respotas

 

 

fazendo assim seria bem mais simples e organizado.... e vc poderia criar mais questões apenas adicionando registro em questões sem precisar mais modificar a tabela...

 

me diga quer fazer da forma certa.... como mostrei acima... ou se preferir te falo como fazer no seu exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Concordo com Jordan Pinheiro_147113,a modela "padrão" proposta por ele torna relativamente fácil gráficos, relatórios etc.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é trabalho a mais? pois realmente não terão questões a mais. A questão é que já tenho bastante coisa pronta... bom, de qualquer maneira, posso modificar a estrutura, ainda tenho prazo. Vou dar uma mexida e retorno daqui a pouco! ;-)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hoje, tenho as seguintes tabelas

- sistema_pesquisa (grupo de questoes)
- sistema_contatos (pessoas que responderão as pesquisas)
- sistema_pesquisa_contatos (respostas)

Na verdade, esse não é o mesmo molde que foi sugerido acima? Agora que parei pra pensar, é a merma coisa! :yes: Unica coisa é que não tenho uma tabela especifica para as questões, visto que seriam só 5 por pesquisa, não vi a necessidade de criar diversas ligações pra depois eu ficar me enrolando no meu framework experimental :natallaugh:

Aqui estão:

 

 

sistema_contatos


`conEntId` int(10) NOT NULL AUTO_INCREMENT,
`conEntNome` varchar(250) NOT NULL,
`conEntEmail` varchar(250) NOT NULL,
`conEntEmpresa` varchar(255) NOT NULL,
`conEntAtivo` enum('S','N') NOT NULL,
`conEntExcluido` enum('S','N') NOT NULL

 

 

sistema_pesquisas


`pesId` int(10) NOT NULL AUTO_INCREMENT,
`pesTitulo` varchar(255) NOT NULL,
`pesQuestao01` varchar(255) NOT NULL,
`pesQuestao02` varchar(255) NOT NULL,
`pesQuestao03` varchar(255) NOT NULL,
`pesQuestao04` varchar(255) NOT NULL,
`pesQuestao05` varchar(255) NOT NULL,
`pesDisparada` enum('S','N') NOT NULL,
`pesAtivo` enum('S','N') NOT NULL,
`pesExcluido` enum('S','N') NOT NULL

 

 

 

sistema_pesquisaContato

 

`conEntId` int(10) NOT NULL,
`pesId` int(10) NOT NULL,
`pesRespondida` enum('S','N') NOT NULL,
`pesQuestao01` int(1) NOT NULL,
`pesQuestao02` int(1) NOT NULL,
`pesQuestao03` int(1) NOT NULL,
`pesQuestao04` int(1) NOT NULL,
`pesQuestao05` int(1) NOT NULL,
`pesComentarios` varchar(255) NOT NULL

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... já estou fazendo as alterações! ;-)

 

Valeu por ter aberto a cabeça, heheh

 

Agora, penso no seguinte molde:

 

- tabela contato: ID / Nome / Email / Empresa / Ativo / Excluido

- tabela pesquisa: ID / Titulo / Disparado / Ativo / Excluido

- tabela pergunta: ID / Titulo / PesquisaID / Ativo / Excluido

- tabela resposta: ID / ContatoID / PerguntaID / Resposta escolhida

- tabela contato x pesquisa: ContatoID / PesquisaID / Respondido / Comentario

- tabela pesquisa x resposta = PesquisaID / RespostaID

 

Cada usuário só pode preencher a pesquisa uma vez, por isso o campo Respondido = s/n e Comentário porque ao final da pesquisa, o pesquisado também pode preencher um campo aberto

 

Está certo agora?

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim... n precisa do respondido.. fica redundante.... (quanto mais cortar melhor rs) é só ferificar se existe já um registro com o id do usuário ou não....

 

outra dica... sempre que puder user prefixo... e eventi usar lestras maiúsculas...

 

faça assim...

 

usuario_id e não UsuarioID

 

 

la na frente e for usar algum framework tbm já é meio caminho...

 

e na tabela de resposta vc precisa ter um id int auto increment tbm...

 

 

no mais ta tudo bem..... crie o banco no sql e post aqui.... que eu monto as consultas com vc da forma correta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah sim, eu uso prefixo ;-) só coloquei por extenso aí pra facilitar meu trabalho pra digitar

eh, eu esqueci do autoincrement... coloquei um ID pra tabela e tá tudo certo.

 

Quanto ao respondido, verdade, eh uma coisa a menos pra se preocupar.

 

Básicamente, ficou assim:

 

 

--
-- Table structure for table `sistema2_contato`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_contato` (
  `conId` int(10) NOT NULL AUTO_INCREMENT,
  `conNome` varchar(255) NOT NULL,
  `conEmail` varchar(255) NOT NULL,
  `conEmpresa` varchar(255) NOT NULL,
  `conAtivo` enum('S','N') NOT NULL,
  `conExcluido` enum('S','N') NOT NULL,
  PRIMARY KEY (`conId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
 
--
-- Dumping data for table `sistema2_contato`
--
 
INSERT INTO `sistema2_contato` (`conId`, `conNome`, `conEmail`, `conEmpresa`, `conAtivo`, `conExcluido`) VALUES
(1, 'Maykel Esser', 'esser@gpaprospera.com.br', 'GPA''prospera', 'S', 'N'),
(2, 'Karina Souza', 'karina@gpaprospera.com.br', 'GPA''prospera', 'S', 'N');
 
-- --------------------------------------------------------
 
--
-- Table structure for table `sistema2_contatoxpesquisa`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_contatoxpesquisa` (
  `conId` int(10) NOT NULL,
  `pesId` int(10) NOT NULL,
  `conComentario` varchar(255) COLLATE latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
 
--
-- Dumping data for table `sistema2_contatoxpesquisa`
--
 
 
-- --------------------------------------------------------
 
--
-- Table structure for table `sistema2_pergunta`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_pergunta` (
  `perId` int(10) NOT NULL AUTO_INCREMENT,
  `pesId` int(10) NOT NULL,
  `perTitulo` varchar(255) NOT NULL,
  `perAtivo` enum('S','N') NOT NULL,
  `perExcluido` enum('S','N') NOT NULL,
  PRIMARY KEY (`perId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
 
--
-- Dumping data for table `sistema2_pergunta`
--
 
INSERT INTO `sistema2_pergunta` (`perId`, `pesId`, `perTitulo`, `perAtivo`, `perExcluido`) VALUES
(1, 1, 'Apresentação do lanche', 'S', 'N'),
(2, 1, 'Qualidade', 'S', 'N'),
(3, 1, 'Composição do cardápio', 'S', 'N'),
(4, 1, 'Higiene', 'S', 'N'),
(5, 1, 'Simpatia', 'S', 'N');
 
-- --------------------------------------------------------
 
--
-- Table structure for table `sistema2_pesquisa`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_pesquisa` (
  `pesId` int(10) NOT NULL AUTO_INCREMENT,
  `pesTitulo` varchar(255) NOT NULL,
  `pesDisparada` enum('S','N') NOT NULL,
  `pesAtivo` enum('S','N') NOT NULL,
  `pesExcluido` enum('S','N') NOT NULL,
  PRIMARY KEY (`pesId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
 
--
-- Dumping data for table `sistema2_pesquisa`
--
 
INSERT INTO `sistema2_pesquisa` (`pesId`, `pesTitulo`, `pesDisparada`, `pesAtivo`, `pesExcluido`) VALUES
(1, 'Pesquisa de satisfação Fevereiro/2013', 'N', 'S', 'N'),
(2, 'Pesquisa de satisfação Março/2013', 'N', 'S', 'N');
 
-- --------------------------------------------------------
 
--
-- Table structure for table `sistema2_pesquisaxresposta`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_pesquisaxresposta` (
  `pesId` int(10) NOT NULL,
  `resId` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- Dumping data for table `sistema2_pesquisaxresposta`
--
 
 
-- --------------------------------------------------------
 
--
-- Table structure for table `sistema2_resposta`
--
 
CREATE TABLE IF NOT EXISTS `sistema2_resposta` (
  `resId` int(10) NOT NULL AUTO_INCREMENT,

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou almoçar quando voltar posto tudo



EU FIZ A TABELA DA FORMA Q EU ACHO Q DEVE SER ,

 

 

e já populei... antes de rodar a consulta q calcula tudo.. vamos criar um VIEW direto no MYSQL

 

 

 

-- phpMyAdmin SQL Dump
-- version 3.4.9
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: 15/02/2013 às 19h15min
-- Versão do Servidor: 5.5.20
-- Versão do PHP: 5.3.10


SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";




/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


--
-- Banco de Dados: `croud`
--


-- --------------------------------------------------------


--
-- Estrutura da tabela `pesquisa`
--


CREATE TABLE IF NOT EXISTS `pesquisa` (
  `pes_id` int(11) NOT NULL AUTO_INCREMENT,
  `pes_pesquisa` varchar(200) NOT NULL,
  `pes_data_registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`pes_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;


--
-- Extraindo dados da tabela `pesquisa`
--


INSERT INTO `pesquisa` (`pes_id`, `pes_pesquisa`, `pes_data_registro`) VALUES
(1, 'PESQUISA DE SATISFACAO', '2013-02-15 19:12:22');


-- --------------------------------------------------------


--
-- Estrutura da tabela `questoes`
--


CREATE TABLE IF NOT EXISTS `questoes` (
  `ques_id` int(11) NOT NULL AUTO_INCREMENT,
  `ques_pes_id` int(11) NOT NULL,
  `ques_questao` varchar(200) NOT NULL,
  `ques_data_registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`ques_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;


--
-- Extraindo dados da tabela `questoes`
--


INSERT INTO `questoes` (`ques_id`, `ques_pes_id`, `ques_questao`, `ques_data_registro`) VALUES
(1, 1, 'O QUE VOCE ACHOU DO ATENDIMENTO', '2013-02-15 19:13:27'),
(2, 1, 'GOSTOU DO PRODUTO', '2013-02-15 19:13:27'),
(3, 1, 'GOSTOU DO VENDENDOR', '2013-02-15 19:13:27'),
(4, 1, 'PRETENDE INDICAR PARA AMIGOS', '2013-02-15 19:13:27'),
(5, 1, 'PRETENDE VOLTAR', '2013-02-15 19:13:27');


-- --------------------------------------------------------


--
-- Estrutura da tabela `respostas`
--


CREATE TABLE IF NOT EXISTS `respostas` (
  `res_id` int(11) NOT NULL AUTO_INCREMENT,
  `res_ques_id` int(11) NOT NULL,
  `res_resposta` varchar(200) NOT NULL,
  `res_data_registro` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`res_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;


--
-- Extraindo dados da tabela `respostas`
--


INSERT INTO `respostas` (`res_id`, `res_ques_id`, `res_resposta`, `res_data_registro`) VALUES
(1, 1, '3', '2013-02-15 19:14:13'),
(2, 2, '4', '2013-02-15 19:14:13'),
(3, 3, '5', '2013-02-15 19:14:13'),
(4, 3, '5', '2013-02-15 19:14:13'),
(5, 3, '2', '2013-02-15 19:14:13');


/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

 



PARA FACILITAR RODE DIRETO NO SEU MYSQL (PHPMYADMIN ESSE QUERY) PARA CRIAR UMA VIEW

 

essa view vai juntar as tuas tabelas para facilitar a visualização do conteúdo depois (n é 100% necessário, mas é bom!)

 

 

 

CREATE VIEW pesquisa_questoes as SELECT * FROM questoes INNER JOIN pesquisa ON pes_id = ques_pes_id

depois q rodar vc vai ver q ele vai criar uma tabela com base nessa consulta... e a mesma atualzia só..



na hora de conta as consultas vc usa

 

 


SELECT count(res_id) as total FROM  respostas WHERE res_resposta = 5

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não entendi muito a lógica. Sua base ficou um pouco diferente, e ou eu estou grogue da manhã ou não to entendendo mesmo :assobiando:

Adaptei seu view para o meu banco, ficou assim:

 

 

CREATE VIEW pesquisa_pergunta AS SELECT * FROM sistema2_pergunta per INNER JOIN sistema2_pesquisa pes ON pes.pesId = per.pesId

E retornou DUPLICATE COLUMN NAME 'pesId'

 

Segue abaixo a base certa já, também populada.

--
-- Table structure for table `sistema2_contato`
--

CREATE TABLE IF NOT EXISTS `sistema2_contato` (
  `conId` int(10) NOT NULL AUTO_INCREMENT,
  `conNome` varchar(255) NOT NULL,
  `conEmail` varchar(255) NOT NULL,
  `conEmpresa` varchar(255) NOT NULL,
  `conAtivo` enum('S','N') NOT NULL,
  `conExcluido` enum('S','N') NOT NULL,
  PRIMARY KEY (`conId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

--
-- Dumping data for table `sistema2_contato`
--

INSERT INTO `sistema2_contato` (`conId`, `conNome`, `conEmail`, `conEmpresa`, `conAtivo`, `conExcluido`) VALUES
(1, 'Maykel Esser', 'esser@gpaprospera.com.br', 'GPA''prospera', 'S', 'N'),
(2, 'Karina Souza', 'karina@gpaprospera.com.br', 'GPA''prospera', 'S', 'N');

-- --------------------------------------------------------

--
-- Table structure for table `sistema2_contatoxpesquisa`
--

CREATE TABLE IF NOT EXISTS `sistema2_contatoxpesquisa` (
  `conId` int(10) NOT NULL,
  `pesId` int(10) NOT NULL,
  `conComentario` varchar(255) COLLATE latin1_general_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Dumping data for table `sistema2_contatoxpesquisa`
--

INSERT INTO `sistema2_contatoxpesquisa` (`conId`, `pesId`, `conComentario`) VALUES
(1, 1, 'Teste'),
(2, 1, 'Teste Karina');

-- ------------------------------------------------------------ Table structure for table `sistema2_pergunta`--CREATE TABLE IF NOT EXISTS `sistema2_pergunta` (  `perId` int(10) NOT NULL AUTO_INCREMENT,  `pesId` int(10) NOT NULL,  `perTitulo` varchar(255) NOT NULL,  `perAtivo` enum('S','N') NOT NULL,  `perExcluido` enum('S','N') NOT NULL,  PRIMARY KEY (`perId`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;---- Dumping data for table `sistema2_pergunta`--INSERT INTO `sistema2_pergunta` (`perId`, `pesId`, `perTitulo`, `perAtivo`, `perExcluido`) VALUES(1, 1, 'Apresentação do lanche', 'S', 'N'),(2, 1, 'Qualidade', 'S', 'N'),(3, 1, 'Composição do cardápio', 'S', 'N'),(4, 1, 'Higiene', 'S', 'N'),(5, 1, 'Simpatia', 'S', 'N'),(6, 2, 'Cuidado com a aparência', 'S', 'N'),(7, 2, 'Uniforme', 'S', 'N');-- ------------------------------------------------------------ Table structure for table `sistema2_pesquisa`--CREATE TABLE IF NOT EXISTS `sistema2_pesquisa` (  `pesId` int(10) NOT NULL AUTO_INCREMENT,  `pesTitulo` varchar(255) NOT NULL,  `pesDisparada` enum('S','N') NOT NULL,  `pesAtivo` enum('S','N') NOT NULL,  `pesExcluido` enum('S','N') NOT NULL,  PRIMARY KEY (`pesId`)) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;---- Dumping data for table `sistema2_pesquisa`--INSERT INTO `sistema2_pesquisa` (`pesId`, `pesTitulo`, `pesDisparada`, `pesAtivo`, `pesExcluido`) VALUES(1, 'Pesquisa de satisfação Fevereiro/2013', 'S', 'S', 'N'),(2, 'Pesquisa de satisfação Março/2013', 'N', 'S', 'N');-- ------------------------------------------------------------ Table structure for table `sistema2_resposta`--CREATE TABLE IFNOT EXISTS `sistema2_resposta` (  `resId` int(10) NOT NULL AUTO_INCREMENT,  `perId` int(10) NOT NULL,  `conId` int(10) NOT NULL,  `resResposta` int(1) NOT NULL,
  PRIMARY KEY (`resId`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ;

--
-- Dumping data for table `sistema2_resposta`
--

INSERT INTO `sistema2_resposta` (`resId`, `perId`, `conId`, `resResposta`) VALUES
(1, 1, 1, 1),
(2, 2, 1, 1),
(3, 3, 1, 1),
(4, 4, 1, 1),
(5, 5, 1, 1),
(6, 1, 2, 2),
(7, 2, 2, 3),
(8, 3, 2, 2),
(9, 4, 2, 3),
(10, 5, 2, 2);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa, consegui =D

 

Na verdade, foi uma trabalheira do cão. Não usei views nem nada, fui agrupando os resultados no próprio PHP pra aparecer do jeito que eu precisava.

 

capturadetela20130218as.png

 

Mas obrigado por me clarearem a mente em alguns aspectos! ;-)

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.