Ir para conteúdo

POWERED BY:

Arquivado

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

Ronaldo Neves

Selecionar o campo com mais cadastro

Recommended Posts

Bom dia, estou precisando de ajuda em uma questão, provavelmente é muito simples mas não estou conseguindo achar uma solução.

 

O problema é o seguinte: tenho uma tabela onde são cadastradas áreas de atuação e outra onde são cadastradas vagas e na tabela vagas tem o campo onde se cadastra a id da área de atuação.

 

Preciso mostrar em uma página todas as áreas de atuação cadastradas, mas ordenando pela área que tem mais vagas cadastradas e indo decrescendo.

 

Ex:

 

na tabelam área atuação tenho cadastrado por exemplo:

1 - Administração

2 - Arquitetura

3 - Comércio

4 - Comunicação

5 - Educação

 

e na tabela vagas tenho

 

5 vagas cadastradas em comércio

3 em comunicação

1 em educação

 

gostaria que aparecesse

 

Comércio (5)

Comunicação (3)

Educação (1)

Administração (0)

Arquitetura (0)

 

A estrutura das tabelas são:

 

a tabela rn_areaatuacao é:

 

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`titulo` varchar(255) DEFAULT NULL,
`status` char(1) DEFAULT NULL,
PRIMARY KEY (`id`)
a tabela rn_vagas é:
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idEmpresa` int(11) DEFAULT NULL,
`titulo` varchar(255) DEFAULT NULL,
`slug` varchar(255) DEFAULT NULL,
`areaAtuacao` int(11) DEFAULT NULL,
`especializacao` int(11) DEFAULT NULL,
`nivelHierarquico` int(11) DEFAULT NULL,
`atribuicoes` text,
`experiencias` text,
`escolaridade` varchar(255) DEFAULT NULL,
`qualificacoes` text,
`informacoesAdicionais` text,
`total` char(10) DEFAULT NULL,
`salario` varchar(255) DEFAULT NULL,
`local` int(11) DEFAULT NULL,
`validade` date DEFAULT NULL,
`prioridade` char(1) DEFAULT NULL,
`dataCad` datetime DEFAULT NULL,
`userCad` varchar(255) DEFAULT NULL,
`status` char(1) DEFAULT NULL,
`visitas` int(15) DEFAULT NULL,
PRIMARY KEY (`id`)
na tabela vagas vou pegar o campo areaAtuacao, que recebe a id da tabela área de atuação
Como consigo fazer esse select? Desde já agradeço a ajuda!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se resolve:

 

SELECT B.Titulo, COUNT(*) AS Quantidade 
FROM rn_vagas A
LEFT JOIN rn_areaatuacao B ON B.areaAtuacao = A.areaAtuacao
GROUP BY B.Titulo

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja se resolve:

 

SELECT B.Titulo, COUNT(*) AS Quantidade 
FROM rn_vagas A
LEFT JOIN rn_areaatuacao B ON B.areaAtuacao = A.areaAtuacao
GROUP BY B.Titulo

[]'s

No lugar do "B" e do "A" vão os nomes das tabelas ou é assim mesmo? desculpe a ignorância mas não sou muito bom em MySQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

É assim mesmo. Veja que logo após o nome da tabela eu coloco uma letra, no exemplo usei A e B, mas podia ser qualquer outra. Sendo assim, a letra que eu coloca em seguida "se torna" a tabela. É o chamado "Alias". =]

 

 

O mesmo ocorre quando peço para imprimir a quantidade no COUNT(*). Veja que logo depois coloco "AS Quantidade", fazendo com que a coluna seja alterada para o nome Quantidade.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É assim mesmo. Veja que logo após o nome da tabela eu coloco uma letra, no exemplo usei A e B, mas podia ser qualquer outra. Sendo assim, a letra que eu coloca em seguida "se torna" a tabela. É o chamado "Alias". =]

 

 

O mesmo ocorre quando peço para imprimir a quantidade no COUNT(*). Veja que logo depois coloco "AS Quantidade", fazendo com que a coluna seja alterada para o nome Quantidade.

Ta dando erro:

 

#1054 - Unknown column 'B.areaAtuacao' in 'on clause'

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta dando erro:

 

#1054 - Unknown column 'B.areaAtuacao' in 'on clause'

 

Opa! Falta de atenção minha. Este erro está dizendo que a coluna "areaAtuacao" não existe na tabela B, que no caso é a rn_areaatuacao .

 

Troque B.areaAtuacao por B.Id. Vai ficar assim:

 

SELECT B.Titulo, COUNT(*) AS Quantidade 
FROM rn_vagas A
LEFT JOIN rn_areaatuacao B ON B.Id = A.areaAtuacao
GROUP BY B.Titulo

 

Estamos relacionado as 2 tabelas e, para isto, tem que informar aonde está esta relação, que na sua tabela é areaAtuacao da tabela rn_vagas com o ID da tabela rn_areaatuacao , correto?

 

No caso do LEFT JOIN, vai trazer todos os itens da tabela a esquerda, que é a rn_vagas. Então se, hipoteticamente falando, você deletar uma área de atuação mantendo a vaga ainda registrada, vai mostrar um campo com Titulo como NULL, se quiser pegar APENAS as que existirem na tabela de atuação, utilize o INNER JOIN.

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa! Falta de atenção minha. Este erro está dizendo que a coluna "areaAtuacao" não existe na tabela B, que no caso é a rn_areaatuacao .

 

Troque B.areaAtuacao por B.Id. Vai ficar assim:

 

SELECT B.Titulo, COUNT(*) AS Quantidade FROM rn_vagas ALEFT JOIN rn_areaatuacao B ON B.Id = A.areaAtuacaoGROUP BY B.Titulo

Estamos relacionado as 2 tabelas e, para isto, tem que informar aonde está esta relação, que na sua tabela é areaAtuacao da tabela rn_vagas com o ID da tabela rn_areaatuacao , correto?

 

No caso do LEFT JOIN, vai trazer todos os itens da tabela a esquerda, que é a rn_vagas. Então se, hipoteticamente falando, você deletar uma área de atuação mantendo a vaga ainda registrada, vai mostrar um campo com Titulo como NULL, se quiser pegar APENAS as que existirem na tabela de atuação, utilize o INNER JOIN.

 

[]'s

 

 

Cara, muito obrigado pela ajuda, ajudou bastante, agora só mais uma dúvida....

 

to querendo que ele selecione somente as que na tabela rn_vagas o status seja 1

Iai pessoal, alguém pode me ajudar?

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.