Ir para conteúdo

POWERED BY:

Arquivado

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

Keven Jesus_164006

[Resolvido] Problema Logica

Recommended Posts

Creio que seja isso. Qualquer dúvida, pergunte:

 

modeling.png

 

 

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `testeimasters` ;
CREATE SCHEMA IF NOT EXISTS `testeimasters` DEFAULT CHARACTER SET utf8 ;
USE `testeimasters` ;

-- -----------------------------------------------------
-- Table `testeimasters`.`empresa`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`empresa` (
 `CNPJ` INT(10) UNSIGNED NOT NULL ,
 `nome` VARCHAR(20) NOT NULL ,
 PRIMARY KEY (`CNPJ`) ,
 UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`usuario`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`usuario` (
 `id` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT ,
 `email` VARCHAR(45) NOT NULL ,
 `nome` VARCHAR(45) NOT NULL ,
 PRIMARY KEY (`id`) ,
 UNIQUE INDEX `email_UNIQUE` (`email` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`vaga`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`vaga` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `empresa` INT(10) UNSIGNED NOT NULL ,
 `titulo` VARCHAR(45) NOT NULL ,
 `descricao` VARCHAR(100) NOT NULL ,
 PRIMARY KEY (`id`) ,
 INDEX `empresa` (`empresa` ASC) ,
 CONSTRAINT `empresa`
   FOREIGN KEY (`empresa` )
   REFERENCES `testeimasters`.`empresa` (`CNPJ` )
   ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 7
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`inscricao`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`inscricao` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `usuario` SMALLINT(4) UNSIGNED NOT NULL ,
 `vaga` INT(10) UNSIGNED NOT NULL ,
 PRIMARY KEY (`id`) ,
 UNIQUE INDEX `inscricao_UNIQUE` (`usuario` ASC, `vaga` ASC) ,
 INDEX `usuario` (`usuario` ASC) ,
 INDEX `vaga` (`vaga` ASC) ,
 CONSTRAINT `usuario`
   FOREIGN KEY (`usuario` )
   REFERENCES `testeimasters`.`usuario` (`id` )
   ON DELETE CASCADE,
 CONSTRAINT `vaga`
   FOREIGN KEY (`vaga` )
   REFERENCES `testeimasters`.`vaga` (`id` )
   ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 13
DEFAULT CHARACTER SET = utf8;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

START TRANSACTION;

-- -----------------------------------------------------
-- Data for table `testeimasters`.`empresa`
-- -----------------------------------------------------
INSERT INTO `empresa` (`CNPJ`, `Nome`) VALUES
 (1, 'Empresa 1'),
 (2, 'Empresa 2'),
 (3, 'Empresa 3');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`vagas`
-- -----------------------------------------------------
INSERT INTO `vaga` (`id`, `empresa`, `titulo`, `descricao`) VALUES
 (1, 1, 'Vaga X', 'Primeira vaga da empresa 1'),
 (2, 2, 'Vaga Z', 'Primeira vaga da empresa 2'),
 (3, 3, 'Vaga B', 'Primeira vaga da empresa 3'),
 (4, 1, 'Vaga Y', 'Segunda vaga da empresa 1'),
 (5, 2, 'Vaga A', 'Segunda vaga da empresa 2'),
 (6, 3, 'Vaga C', 'Segunda vaga da empresa 3');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`usuarios`
-- -----------------------------------------------------
INSERT INTO `usuario` (`id`, `email`, `nome`) VALUES
 (1, 'usuario1@email.com', 'Usuario 1'),
 (3, 'usuario3@email.com', 'Usuario 3'),
 (2, 'usuario2@email.com', 'Usuario 2');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`inscricoes`
-- -----------------------------------------------------
INSERT INTO `inscricao` (`id`, `usuario`, `vaga`) VALUES
 (1, 1, 1),
 (2, 1, 2),
 (3, 1, 3),
 (4, 1, 4),
 (5, 2, 2),
 (6, 2, 3),
 (7, 2, 4),
 (8, 2, 5),
 (9, 3, 3),
 (10, 3, 4),
 (11, 3, 5),
 (12, 3, 6);

COMMIT;

 

 

SELECT
 vaga.titulo AS "Título da vaga",
 empresa.nome AS "Empresa",
 COUNT(inscricao.usuario) AS "Inscrições"
FROM inscricao
JOIN vaga ON vaga.id = inscricao.vaga
JOIN empresa ON empresa.cnpj = vaga.empresa
GROUP BY vaga.id, empresa.cnpj;

 

output.png

 

Como aprendizado, fica pra você fazer a implementação no PHP :)

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja bem

eu pesquisei inner join na internet e achei essa video aula

http://www.upinside.com.br/video-aulas/ligando-tabelas-com-inner-left-e-right-join

 

entendi tudo como funciona la e peguei seu exemplo e integrei as minhas tabelas

 

veja a img abaixo na ordem oque eu fiz

preciso saber no while como vou mostrar isso $linha['coluna?'] é isso eu ententei isso e nao me mostro nada

 

Zi8ac.jpg

 

Creio que seja isso. Qualquer dúvida, pergunte:

 

modeling.png

 

 

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `testeimasters` ;
CREATE SCHEMA IF NOT EXISTS `testeimasters` DEFAULT CHARACTER SET utf8 ;
USE `testeimasters` ;

-- -----------------------------------------------------
-- Table `testeimasters`.`empresa`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`empresa` (
 `CNPJ` INT(10) UNSIGNED NOT NULL ,
 `nome` VARCHAR(20) NOT NULL ,
 PRIMARY KEY (`CNPJ`) ,
 UNIQUE INDEX `nome_UNIQUE` (`nome` ASC) )
ENGINE = InnoDB
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`usuario`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`usuario` (
 `id` SMALLINT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT ,
 `email` VARCHAR(45) NOT NULL ,
 `nome` VARCHAR(45) NOT NULL ,
 PRIMARY KEY (`id`) ,
 UNIQUE INDEX `email_UNIQUE` (`email` ASC) )
ENGINE = InnoDB
AUTO_INCREMENT = 4
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`vaga`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`vaga` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `empresa` INT(10) UNSIGNED NOT NULL ,
 `titulo` VARCHAR(45) NOT NULL ,
 `descricao` VARCHAR(100) NOT NULL ,
 PRIMARY KEY (`id`) ,
 INDEX `empresa` (`empresa` ASC) ,
 CONSTRAINT `empresa`
   FOREIGN KEY (`empresa` )
   REFERENCES `testeimasters`.`empresa` (`CNPJ` )
   ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 7
DEFAULT CHARACTER SET = utf8;


-- -----------------------------------------------------
-- Table `testeimasters`.`inscricao`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `testeimasters`.`inscricao` (
 `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `usuario` SMALLINT(4) UNSIGNED NOT NULL ,
 `vaga` INT(10) UNSIGNED NOT NULL ,
 PRIMARY KEY (`id`) ,
 UNIQUE INDEX `inscricao_UNIQUE` (`usuario` ASC, `vaga` ASC) ,
 INDEX `usuario` (`usuario` ASC) ,
 INDEX `vaga` (`vaga` ASC) ,
 CONSTRAINT `usuario`
   FOREIGN KEY (`usuario` )
   REFERENCES `testeimasters`.`usuario` (`id` )
   ON DELETE CASCADE,
 CONSTRAINT `vaga`
   FOREIGN KEY (`vaga` )
   REFERENCES `testeimasters`.`vaga` (`id` )
   ON DELETE CASCADE)
ENGINE = InnoDB
AUTO_INCREMENT = 13
DEFAULT CHARACTER SET = utf8;



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

START TRANSACTION;

-- -----------------------------------------------------
-- Data for table `testeimasters`.`empresa`
-- -----------------------------------------------------
INSERT INTO `empresa` (`CNPJ`, `Nome`) VALUES
 (1, 'Empresa 1'),
 (2, 'Empresa 2'),
 (3, 'Empresa 3');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`vagas`
-- -----------------------------------------------------
INSERT INTO `vaga` (`id`, `empresa`, `titulo`, `descricao`) VALUES
 (1, 1, 'Vaga X', 'Primeira vaga da empresa 1'),
 (2, 2, 'Vaga Z', 'Primeira vaga da empresa 2'),
 (3, 3, 'Vaga B', 'Primeira vaga da empresa 3'),
 (4, 1, 'Vaga Y', 'Segunda vaga da empresa 1'),
 (5, 2, 'Vaga A', 'Segunda vaga da empresa 2'),
 (6, 3, 'Vaga C', 'Segunda vaga da empresa 3');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`usuarios`
-- -----------------------------------------------------
INSERT INTO `usuario` (`id`, `email`, `nome`) VALUES
 (1, 'usuario1@email.com', 'Usuario 1'),
 (3, 'usuario3@email.com', 'Usuario 3'),
 (2, 'usuario2@email.com', 'Usuario 2');

-- -----------------------------------------------------
-- Data for table `testeimasters`.`inscricoes`
-- -----------------------------------------------------
INSERT INTO `inscricao` (`id`, `usuario`, `vaga`) VALUES
 (1, 1, 1),
 (2, 1, 2),
 (3, 1, 3),
 (4, 1, 4),
 (5, 2, 2),
 (6, 2, 3),
 (7, 2, 4),
 (8, 2, 5),
 (9, 3, 3),
 (10, 3, 4),
 (11, 3, 5),
 (12, 3, 6);

COMMIT;

 

 

SELECT
 vaga.titulo AS "Título da vaga",
 empresa.nome AS "Empresa",
 COUNT(inscricao.usuario) AS "Inscrições"
FROM inscricao
JOIN vaga ON vaga.id = inscricao.vaga
JOIN empresa ON empresa.cnpj = vaga.empresa
GROUP BY vaga.id, empresa.cnpj;

 

output.png

 

Como aprendizado, fica pra você fazer a implementação no PHP :)

 

Evandro ,

eu entrei com contato com DAVID CHC ele me mostro um tutor parecido com seu ai

esse problema de relacionamento de tabelas ai

é worksql ne? alguma coisa assim infezlimente eu to sem tempo a pesquisar tutoriais sobre ele

eu uso navicat e nao achei video aula como relacionar poisebem

 

vou tentar usar este codigo que você me passo ai e integrar a o projeto da empresa

mais eu nao gostaria somente de pegar codigo eu queria intentender tbm posteriomanete quero estado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Evandro ,

eu entrei com contato com DAVID CHC ele me mostro um tutor parecido com seu ai

esse problema de relacionamento de tabelas ai

 

Não há problema nenhum de relacionamento entre as tabelas, o código postado funciona.

 

é worksql ne? alguma coisa assim infezlimente eu to sem tempo a pesquisar tutoriais sobre ele

MySQL Workbench, é uma alternativa umas 10000 vezes melhor que o PHPMyAdmin.

 

eu uso navicat e nao achei video aula como relacionar poisebem

 

Como disse, o código já funciona, não precisa relacionar nada.

 

vou tentar usar este codigo que você me passo ai e integrar a o projeto da empresa

mais eu nao gostaria somente de pegar codigo eu queria intentender tbm posteriomanete quero estado

 

Não integre, não foi esse o objetivo. Isolei o seu problema em todos os componentes necessários para a resolução do mesmo. Quando você entender como funciona, será capaz de fazer sua própria integração, talvez sem nem modificar a estrutuda do que já está pronto. Eu, particularmente, me sinto mais à vontade para testar assim, isolando cada funcionalidade do escopo do projeto.

 

A primeira figurinha foi gerada apenas como uma forma de desenhar esse post aqui:

 

Legenda: As palavras que estiverem na cor verde, são as tabelas.

 

Vamos na lógica, você tem uma tabela chamada `empresas`, por exemplo, e mais três, uma chamada `vagas`, outra `candidatos` e a `interesses`. A `empresas`, será responsável por armazenar as empresas que anunciaram as vagas, a `vagas`, será responsável por armazenar as vagas que as empresas irão anunciar, e a `interesses`, ficará responsável, por armazenar as chaves-estrangeiras, tanto da `empresas`, quanto a da `vagas`.

 

E depois, você irá relacionar as três tabelas por chave-estrangeira. Logicamente, é isso, como estou no trabalho agora, não vai dar pra eu te mostrar como faz, mas acho que depois da explicação, dará para fazer.

 

 

É apenas uma representação gráfica do que já foi tentado te explicar.

Feito isso, tem a DDL e alguns dados para testes iniciais dentro do script no

 

 

Temos a base, temos os dados, atacamos o problema que você propôs. Partindo do ponto que você disse que entendeu como funcionam os joins ...

 

entendi tudo como funciona la e peguei seu exemplo e integrei as minhas tabelas

 

As únicas explicações que faltam são o count, group e como usar tudo isso.

 

count: http://dev.mysql.com/doc/refman/5.1/en/counting-rows.html

group: http://dev.mysql.com/doc/refman/5.0/en/group-by-hidden-columns.html

 

como usar:

<?php

$query = "SELECT bla bla bla...";

$data  = mysql_query($query) or die("Falhou!! " . mysql_error());

while (FALSE !== ($row = mysql_fetch_assoc))) {
   var_dump($row);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse eo meu problema ou eu estudo ou eu trabalho eu vi umas video aula de inner join pesquisei sobre ele e vi pouca coisa

 

se eu estudar em horario de serviço = xau keven

 

eu fiz projeto todo o site ta pronto só me engarrafei ai nesse problema que entendi em partes ainda.

eu só preciso mostra numericamente

 

EMPRESA DE CAFE anunciou vaga de auxiliar administrativo e vaga de gerente exemplo

 

entao temos 10 candidatos para vaga auxiliar e 5 para gerente

 

entao

Candidados[10] para vaga de auxiliar administrativo da empresa[id] só isso todo mundo falando que é simples mais pra mim nao esta sendo simples eu nao consigo entender tudo eu entendo um pokinho do DB que passam eu entendo parcialmente o php que me mostram mais eu nao entendo tudo no seu caso você me mostro uma sql que ja me mostrarão tem a mesma função só tem coisas preenchidas nela

o php parecido tbm

 

eu nao consigo entender onde passa isso dentro do while que vai me lista tudo de acordo

se eu fazer feth array

$linha['coluna'] nao me mostra mesmo usando o count ai nao me mostra. ja nem sei mais oque fazer

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode alterar o topico para resolvido

solução do DAVID CHC

SELECT  vaga.titulo , COUNT(inscricao.usuario) AS total FROM inscricao LEFT JOIN vaga ON vaga.id = inscricao.vaga GROUP BY vaga.id

e pra mostrar no while

<td><?php echo $row['total']?></td>
<td><?php echo $row['titulo']?></td>

 

vlw ajuda de todos e paciência

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.