Ir para conteúdo
Fórum Script Brasil
  • 0

Dificuldade em SELECT MySQL


Marcelouco

Pergunta

Bom dia!

Estou tendo uma certa dificuldade pra criar uma query avançada (pelo menos pra mim). Será que alguém poderia me ajudar?

É o seguinte:

Tenho as tabelas: arquivo, arquivo_grupo, grupos, usuarios, usuarios_download, usuario_grupo.

Tenho uma página que lista um relatório de quais usuários baixou qual arquivo e quando baixou, com a seguinte query:

SELECT
     arquivo.nome_arquivo as NomeArquivo,
     arquivo.legenda_arquivo as LegendaArquivo,
     usuarios.nome_usuario as NomeUsuario,
     usuarios.sobrenome_usuario as SobrenomeUsuario,
     usuario_download.data_download as DataDownload
    FROM arquivo
    INNER JOIN (usuario_download LEFT JOIN usuarios ON
    usuario_download.id_usuario = usuarios.id_usuario)
    ON arquivo.id_arquivo = usuario_download.id_arquivo 
    order by NomeArquivo Desc
E funciona perfeitamente. Logo, esta lista será longa com o passar do tempo. Portanto, criei um combobox com todos os grupos onde poderei escolherei por qual grupo quero listar o relatório (filtrar). Aí entra o problema. Como eu poderia fazer esse novo QUERY? Alguém tem a solução? Para quem puder me ajudar e quiser o banco pra testar:
/*
SQLyog Community v9.51 
MySQL - 5.1.54-rel12.5-log : Database - BDteste
*********************************************************************
*/


/*!40101 SET NAMES utf8 */;

/*!40101 SET SQL_MODE=''*/;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
CREATE DATABASE /*!32312 IF NOT EXISTS*/`BDteste` /*!40100 DEFAULT CHARACTER SET latin1 COLLATE latin1_general_ci */;

USE `BDteste`;

/*Table structure for table `arquivo` */

DROP TABLE IF EXISTS `arquivo`;

CREATE TABLE `arquivo` (
  `id_arquivo` int(11) NOT NULL AUTO_INCREMENT,
  `legenda_arquivo` varchar(128) NOT NULL,
  `nome_arquivo` varchar(128) NOT NULL,
  `url_arquivo` varchar(512) NOT NULL,
  `comentario_arquivo` text NOT NULL,
  `tipo_arquivo` varchar(60) NOT NULL,
  `tamanho_arquivo` varchar(40) NOT NULL,
  `data_envio` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id_arquivo`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=latin1;

/*Data for the table `arquivo` */

insert  into `arquivo`(`id_arquivo`,`legenda_arquivo`,`nome_arquivo`,`url_arquivo`,`comentario_arquivo`,`tipo_arquivo`,`tamanho_arquivo`,`data_envio`) values (10,'Teste de legenda','1327327647agua_viva_cc.jpg','arquivos/1327327647agua_viva_cc.jpg','Um script de menu em árvore','jpg','757.52 KB','2012-01-23 12:07:27'),(11,'Teste','1327332950teste_sem_espaco_ae.doc','arquivos/1327332950teste_sem_espaco_ae.doc','teste','doc','21.50 KB','2012-01-23 13:35:50'),(12,'Teste 2','1327333217twitter.jpg','arquivos/1327333217twitter.jpg','teste','jpg','1.19 MB','2012-01-23 13:40:17'),(13,'Teste 3','1327333376twitter_copia.jpg','arquivos/1327333376twitter_copia.jpg','teste','jpg','13.41 MB','2012-01-23 13:42:56');

/*Table structure for table `arquivo_grupo` */

DROP TABLE IF EXISTS `arquivo_grupo`;

CREATE TABLE `arquivo_grupo` (
  `id_arquivo` int(11) NOT NULL,
  `id_grupo` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `arquivo_grupo` */

insert  into `arquivo_grupo`(`id_arquivo`,`id_grupo`) values (10,13),(11,13),(12,13),(13,14);

/*Table structure for table `grupos` */

DROP TABLE IF EXISTS `grupos`;

CREATE TABLE `grupos` (
  `id_grupo` int(11) NOT NULL AUTO_INCREMENT,
  `nome_grupo` varchar(60) NOT NULL,
  `logo_grupo` varchar(128) DEFAULT NULL,
  `info_grupo` varchar(512) DEFAULT NULL,
  `cor_grupo` varchar(20) DEFAULT NULL,
  PRIMARY KEY (`id_grupo`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=latin1;

/*Data for the table `grupos` */

insert  into `grupos`(`id_grupo`,`nome_grupo`,`logo_grupo`,`info_grupo`,`cor_grupo`) values (13,'Belo Horizonte',NULL,NULL,NULL),(14,'Barbacena',NULL,NULL,NULL),(15,'Governador Valadares','1327346084agua_viva_cc.jpg','testedsafsdf','D8F2F0'),(16,'Varginha','1327345628desert.jpg','dsfsadfsdafdsafsdafvcxv','FF4F2B');

/*Table structure for table `usuario_download` */

DROP TABLE IF EXISTS `usuario_download`;

CREATE TABLE `usuario_download` (
  `id_usuario` int(4) NOT NULL,
  `id_arquivo` int(4) NOT NULL,
  `data_download` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `usuario_download` */

insert  into `usuario_download`(`id_usuario`,`id_arquivo`,`data_download`) values (23,13,'2012-01-23 13:44:08'),(23,10,'2012-01-23 13:46:16'),(24,13,'2012-01-23 15:03:43'),(24,13,'2012-01-23 15:04:05'),(24,13,'2012-01-23 15:04:12'),(24,13,'2012-01-23 15:04:51'),(24,13,'2012-01-23 15:07:49');

/*Table structure for table `usuario_grupo` */

DROP TABLE IF EXISTS `usuario_grupo`;

CREATE TABLE `usuario_grupo` (
  `id_grupo` int(11) NOT NULL,
  `id_usuario` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

/*Data for the table `usuario_grupo` */

insert  into `usuario_grupo`(`id_grupo`,`id_usuario`) values (16,19),(13,22),(13,23),(14,24);

/*Table structure for table `usuarios` */

DROP TABLE IF EXISTS `usuarios`;

CREATE TABLE `usuarios` (
  `id_usuario` int(4) NOT NULL AUTO_INCREMENT,
  `nome_usuario` varchar(40) NOT NULL,
  `sobrenome_usuario` varchar(40) NOT NULL,
  `login_usuario` varchar(30) NOT NULL,
  `senha_usuario` varchar(30) NOT NULL,
  `tipo_usuario` int(2) NOT NULL,
  PRIMARY KEY (`id_usuario`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=latin1;

/*Data for the table `usuarios` */

insert  into `usuarios`(`id_usuario`,`nome_usuario`,`sobrenome_usuario`,`login_usuario`,`senha_usuario`,`tipo_usuario`) values (19,'Marcelo','Dênis','marcelo','123',1),(22,'Jefferson','Bastos','jefferson','123',1),(23,'Fernanda','Oliveira','fernanda','123',0),(24,'Adolfo','Crisvaldo','adocris','123',0);

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

Aguardo respostas.

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Já que você tem um combo para filtrar o grupo, ele carrega os dados do grupo certo, tipo id_grupo, nome_grupo? Então, quando for mandar carregar a query pela linguagem de programação, manda o value do combo como parametro no where da consulta

Tipo:

SELECT
     arquivo.nome_arquivo as NomeArquivo,
     arquivo.legenda_arquivo as LegendaArquivo,
     usuarios.nome_usuario as NomeUsuario,
     usuarios.sobrenome_usuario as SobrenomeUsuario,
     usuario_download.data_download as DataDownload
FROM 
    arquivo a
    JOIN usuario_download ud on ud.id_arquivo = a.id_arquivo 
    JOIN usuarios u on u.id_usuario = ud.id_usuario
    JOIN arquivo_grupo ag on ag.id_arquivo = ud.id_arquivo
WHERE 
    ag.idGrupo = 'idGrupoCombo'
ORDER BY
    a.NomeArquivo Desc

onde o idGrupoCombo é a variável que você pegou do valor do combo

Qualquer coisa diz aí

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...