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

Select Estados


gapaia44

Pergunta

Boa Tarde Amigos do forum to com um problemaço e gostaria de ajuda de vocês e o seguinte

tenho um sistema com 5 tabelas:

Clientes

Estados

Cidades

Bairros

Profissoes

A minha duvida e a seguinte, no sistema o visitante faz uma busca pelo a profissão do cliente, eu não estou conseguinto montar um select que traga na seguinte orderm os resultados:

Estado

Cidade

Bairro

Profissao com o numero de clientes

EX: busca pela Prosissão WEB ai o resultado seria

São Paulo => Estado

São Paulo => Cidade

Centro=> Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Interlagos => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Osasco => Cidade

Centro=> Bairro

webdesign => profissao (3) => n clientes

Minas Gerais => Estado

Belo Horizonte => Cidade

Centro => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Savassi => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Estrutura dos Bancos de dados

Tabela Cliente

id

Nome

id_profissao

id_estado

id_cidade

id_bairro

Tabela Estado

id

Nome

tabela Cidade

id

id_estado

Nome

Tabela Bairro

id

id_cidade

nome

tabela profissao

id

nome

Desde já agradeço a ajuda de vocês fiquem com deus . :rolleyes:

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0
Voce precisa fazer a relação entre as tabelas, fazendo o inner join para que elas possam "unir" as informações.

A sequencia, voce precisa usar o order by, assim voce pode ordenar como quiser, na ordem que desejar!

Qualquer coisa estamos ai

Muito legal mais como eu poderia fazer isso sou novato na linguagem e garrei nisso o banco de dados e este:

CREATE TABLE `cliente` (

`id` int(11) NOT NULL auto_increment,

`data_cadastro` date default NULL,

`tipo_pessoa` char(3) default NULL,

`cpf` char(14) default NULL,

`nome` char(150) default NULL,

`sexo` smallint(1) default NULL,

`endereco` char(255) default NULL,

`numero` char(8) default NULL,

`complemento` char(50) default NULL,

`id_estado` char(11) default NULL,

`id_cidade` char(11) default NULL,

`bairro` char(100) default NULL,

`cep` char(10) default NULL,

`telefone` char(13) default NULL,

`celular` char(13) default NULL,

`email` char(255) default NULL,

`razao` char(180) default NULL,

`frase` char(150) default NULL,

`descricao` text,

`nome_indicacao1` char(100) default NULL,

`tel_indicacao1` char(13) default NULL,

`cel_indicacao1` char(13) default NULL,

`nome_indicacao2` char(100) default NULL,

`tel_indicacao2` char(13) default NULL,

`cel_indicacao2` char(13) default NULL,

`nome_indicacao3` char(100) default NULL,

`tel_indicacao3` varchar(13) default NULL,

`cel_indicacao3` char(13) default NULL,

`id_vendedor` char(11) default NULL,

`vencimento` date default NULL,

`chave` smallint(1) default NULL,

`sigla` char(6) default NULL,

`login` char(20) default NULL,

`senha` char(12) default NULL,

`profissao` char(11) default NULL,

`exibicao` smallint(1) default NULL,

`site` char(150) default NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=22 ;

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

--

-- Estrutura da tabela `dados_bairros`

--

CREATE TABLE `dados_bairros` (

`id` int(11) NOT NULL auto_increment,

`id_cidade` int(11) default NULL,

`nome` varchar(150) default NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=21 ;

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

--

-- Estrutura da tabela `dados_cidades`

--

CREATE TABLE `dados_cidades` (

`id` int(4) NOT NULL auto_increment,

`id_estado` int(4) NOT NULL default '0',

`uf` varchar(4) NOT NULL default '',

`nome` varchar(50) NOT NULL default '',

UNIQUE KEY `id` (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=9726 ;

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

--

-- Estrutura da tabela `dados_estados`

--

CREATE TABLE `dados_estados` (

`id` tinyint(4) NOT NULL auto_increment,

`uf` varchar(10) NOT NULL default '',

`nome` varchar(20) NOT NULL default '',

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=29 ;

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

--

-- Estrutura da tabela `profissoes`

--

CREATE TABLE `profissoes` (

`id` int(11) NOT NULL auto_increment,

`nome` char(100) default NULL,

`descricao` longtext,

`img` text,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=603 ;

Eu teria que mudar alguma coisa na parte de Cadastro, ada tabela tem seu cadastro em separado.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'gapaia44'!

Primeiro, você precisa fazer algumas modificações na estrutura de sua tabela de clientes. Elas visam compatibilisar as ligações entre as tabelas.

As modificações são estas:

ALTER TABLE `cliente`
MODIFY id_cidade int not null default 0,
MODIFY id_estado int not null default 0,
CHANGE bairro id_bairro int not null default 0,
CHANGE profissao id_profissao int not null default 0;
Segundo, você deverá verificar se os dados destes campos não foram dropados. Se foram, então você deve corrigí-los antes de passar ao próximo passo. Terceiro, sua consulta:
SELECT e.UF AS UF, c.nome AS Cidade, b.nome AS Bairro, p.nome AS Profissao, COUNT(cli.id) AS QT_Clientes
FROM `cliente` cli
INNER JOIN `dados_estados` e ON e.id = cli.id_estado
INNER JOIN `dados_cidades` c ON c.id = cli.id_cidade
INNER JOIN `dados_bairros`  b ON b.id = cli.id_bairro
INNER JOIN `profissoes` p ON p.id = id_profissao 
GROUP BY e.UF, c.nome, b.nome, p.nome;

Link para o comentário
Compartilhar em outros sites

  • 0
Oi, 'gapaia44'!

Primeiro, você precisa fazer algumas modificações na estrutura de sua tabela de clientes. Elas visam compatibilisar as ligações entre as tabelas.

As modificações são estas:

ALTER TABLE `cliente`
MODIFY id_cidade int not null default 0,
MODIFY id_estado int not null default 0,
CHANGE bairro id_bairro int not null default 0,
CHANGE profissao id_profissao int not null default 0;
Segundo, você deverá verificar se os dados destes campos não foram dropados. Se foram, então você deve corrigí-los antes de passar ao próximo passo. Terceiro, sua consulta:
SELECT e.UF AS UF, c.nome AS Cidade, b.nome AS Bairro, p.nome AS Profissao, COUNT(cli.id) AS QT_Clientes
FROM `cliente` cli
INNER JOIN `dados_estados` e ON e.id = cli.id_estado
INNER JOIN `dados_cidades` c ON c.id = cli.id_cidade
INNER JOIN `dados_bairros`  b ON b.id = cli.id_bairro
INNER JOIN `profissoes` p ON p.id = id_profissao 
GROUP BY e.UF, c.nome, b.nome, p.nome;
Fantastico, muito bom mesmo mais so tenho mais uma duvida como faço o echo ou print desta consulta, mais do mais MUITO OBIGADO você e muito fera ! Deus te abençoe
Oi, 'gapaia44'! Primeiro, você precisa fazer algumas modificações na estrutura de sua tabela de clientes. Elas visam compatibilisar as ligações entre as tabelas. As modificações são estas:
ALTER TABLE `cliente`
MODIFY id_cidade int not null default 0,
MODIFY id_estado int not null default 0,
CHANGE bairro id_bairro int not null default 0,
CHANGE profissao id_profissao int not null default 0;
Segundo, você deverá verificar se os dados destes campos não foram dropados. Se foram, então você deve corrigí-los antes de passar ao próximo passo. Terceiro, sua consulta:
SELECT e.UF AS UF, c.nome AS Cidade, b.nome AS Bairro, p.nome AS Profissao, COUNT(cli.id) AS QT_Clientes
FROM `cliente` cli
INNER JOIN `dados_estados` e ON e.id = cli.id_estado
INNER JOIN `dados_cidades` c ON c.id = cli.id_cidade
INNER JOIN `dados_bairros`  b ON b.id = cli.id_bairro
INNER JOIN `profissoes` p ON p.id = id_profissao 
GROUP BY e.UF, c.nome, b.nome, p.nome;

Mais um pequeno detalhe a busca e realizada pelo nome da profissão onde coloco esta instrução.

Link para o comentário
Compartilhar em outros sites

  • 0
...

Mais um pequeno detalhe a busca e realizada pelo nome da profissão onde coloco esta instrução.

Alterando a consulta:

SELECT e.UF AS UF, c.nome AS Cidade, b.nome AS Bairro, p.nome AS Profissao, COUNT(cli.id) AS QT_Clientes
FROM `cliente` cli
INNER JOIN `dados_estados` e ON e.id = cli.id_estado
INNER JOIN `dados_cidades` c ON c.id = cli.id_cidade
INNER JOIN `dados_bairros`  b ON b.id = cli.id_bairro
INNER JOIN `profissoes` p ON p.id = id_profissao 
WHERE p.nome = <a profissao que voce quer>
GROUP BY e.UF, c.nome, b.nome, p.nome;
Neste caso mais uma modificação será necessária nas tabelas de profissões e clientes: Tabela cliente
ALTER TABLE cliente
ADD INDEX cli_001 (id_estado),
ADD INDEX cli_002 (id_cidade),
ADD INDEX cli_003 (id_bairro),
ADD INDEX cli_004 (id_profissao);
Tabela profissoes
ALTER TABLE profissoes
ADD INDEX profiss_001 (nome);

Alterações semelhantes podem ser efetuadas nas tabelas bairro, estado e cidade para a pesquisa pelos campos "nome" em cada tabela destas.

Link para o comentário
Compartilhar em outros sites

  • 0

como faço para fazer o print desta forma

São Paulo => Estado

São Paulo => Cidade

Centro=> Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Interlagos => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Osasco => Cidade

Centro=> Bairro

webdesign => profissao (3) => n clientes

Minas Gerais => Estado

Belo Horizonte => Cidade

Centro => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

Savassi => Bairro

webdesign => profissao (3) => n clientes

WebMaster => profissao (2) => n clientes

e no minha tela de cadastros vai ser alterado alguma coisa?

Editado por Denis Courcy
melhorar entendimento
Link para o comentário
Compartilhar em outros sites

  • 0

'gapaia44'

Você está programando em que linguagem?

Pergunto isto porque sua dúvida não é mais pertinente a MySQL e vou transferir este tópico para a área da linguagem que você usa.

Link para o comentário
Compartilhar em outros sites

  • 0

Estou programando em PHP.

Fiz aqui o echo e o resultado foi esse:

Minas Gerais

BELO HORIZONTE

Web Designer - ( 2 )

Minas Gerais

BETIM

Web Designer - ( 1 )

Mato Grosso

BATOVI

Web Designer - ( 1 )

Mato Grosso

CIDADE MORENA

Web Designer - ( 1 )

Para ficar Perfeito so precisa parar de repetir o nome do Estado ai ficaria:

Minas Gerais

BELO HORIZONTE

Web Designer - ( 2 )

BETIM

Web Designer - ( 1 )

Mato Grosso

BATOVI

Web Designer - ( 1 )

CIDADE MORENA

Web Designer - ( 1 )

e o meu Print ficou assim:

//trazendo os clientes

$sl=mysql_query("SELECT e.nome AS UF, c.nome AS Cidade, b.nome AS Bairro, p.nome AS Profissao, COUNT(cli.id) AS QT_Clientes

FROM `cliente` cli

INNER JOIN `dados_estados` e ON e.id = cli.id_estado

INNER JOIN `dados_cidades` c ON c.id = cli.id_cidade

INNER JOIN `dados_bairros` b ON b.id = cli.id_bairro

INNER JOIN `profissoes` p ON p.id = id_profissao

WHERE p.nome like 'web%'

GROUP BY e.uf, c.nome, b.nome, p.nome

") or die(mysql_error());

while($row=mysql_fetch_array($sl)){

echo "

<b>$row[uF]</b><br>

$row[Cidade]<br>

$row[Profissao] - ( $row[QT_Clientes] )<br>

";

}//while

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,2k
    • Posts
      652k
×
×
  • Criar Novo...