Jump to content
Fórum Script Brasil
  • 0

Dificuldade em SELECT MySQL


Marcelouco

Question

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 to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 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 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
Answer this question...

×   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.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...