Ajuda com cep.

63 views
Skip to first unread message

Nick Marinho

unread,
May 17, 2007, 3:36:47 PM5/17/07
to [PHP-Brasil]
 Não sei se algo ja mostrado aqui se aplica, mas preciso dessa ajuda.
 Eu tenho um sistema de cadastro de relacionamento de representantes com cep.

 Ex:
Da faixa de cep: 010001-000 até 010002-0000 o representando é o José
Da faixa de cep: 010002-000 até 010003-0000 o representando é o Joaquim

 Porém o José também é representante da faixa de cep: 010003-000 até 010004-0000.
 Bom, a dúvida é complicada para mim, pensei pensei e nao cheguei a lugar algum.

 Como eu deveria guardar isso no Mysql, quero dizer, o que eu guardaria?

 Ex:
ID   NOME                     FAIXA_DE       FAIXA_ATE
1     JOSE                       01001000       01002000
2     JOAQUIM               01002000       01003000
3     MARIA                      01004000      01005000
4     JOSE (o mesmo)    01005000

 Os representantes podem atender mais de uma área, sem limite.

 E na hora de consultar isso ?
 Têm uma função do PHP que eu possa fazer essa varredura mais simplesmente?

 
Agradeço desde agora.

Henrique Van Klaveren

unread,
May 17, 2007, 3:49:32 PM5/17/07
to php-b...@googlegroups.com

Tipo cria um registro para cada faixa de CEP, para cada usuário!!!!

Depois na hora da busca vc seleciona o usuário e as faixas que ele atende...

 

 

Depois vc dah um SELECT * FROM SUA_TABELA WHERE NOME=’FULANO’...

Não deve ser essa sua duvida neh???

Bem pelo que entendi eh isso!!!

 


Nick Marinho

unread,
May 17, 2007, 4:27:07 PM5/17/07
to php-b...@googlegroups.com
 É mais ou menos isso mesmo.

 O que não consigo entender é como vou fazer para saber a faixa.

 De um numero a outro.

Em 17/05/07, Henrique Van Klaveren <klav...@gmail.com> escreveu:



--
-~----------~----~----~----~------~----~------~--~-------~----
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´ (¸.·` *.::.:: Nick Marinho ::.::. !!!

"O homem nasce sorrindo, cresce fingindo, vive traindo e morre mentindo. A mulher nasce chorando, cresce amando, vive dando e morre negando." (Luiz Fernando Veríssimo)

"No corpo feminino, esse retiro a doce bunda é ainda o que prefiro. A ela, meu mais íntimo suspiro, pois tanto mais a apalpo, quanto admiro." (Carlos Drummond de Andrade)

Grupo Raça Boxer - http://groups-beta.google.com/group/raca-boxer
Grupo Gentoo Maniacs - http://groups-beta.google.com/group/gentoo-maniacs
Meus sites: www.lucianomarinho.com.br www.racaboxer.com.br
Linux Registered User #433536

Henrique Van Klaveren

unread,
May 17, 2007, 4:38:43 PM5/17/07
to php-b...@googlegroups.com

Como assim...

Me explica mais ou menos como que vai funcionar esse seu ambiente...

Pq para saber eh soh fazer um for que ele te imprime todas as Faixas...

 

Tipo se for isso pode fazer assim...

 

$sql=”SELECT * FROM REPRESENTANTES WHERE CODIGO=$_POST[CODIGO”];

$res=mysql_query($sql);

$num = mysql_num_rows($res); //numero de registros obtidos...

 

For($i=0;$i<$num;$i++){

 

echo mysql_result($res,$x,NOME);

echo mysql_result($res,$x,FAIXADE);

echo mysql_result($res,$x,FAIXAATE);

}

 

Mas ainda axo que não te entendi ....

;)

Nick Marinho

unread,
May 17, 2007, 4:55:43 PM5/17/07
to php-b...@googlegroups.com
 Não creio que seja assim, mas vou tentar explicar melhor para que todos possam entender tambem.

 Como dito no primeiro email.


ID             NOME                FAIXA_DE          FAIXA_ATE
1                 JOSE                 01001000            01002000
2                 MARIA               09999000            09999010
3                 JOAO                05555000            05555100
4                 JOSE                 01400999            01590999


As faixas de representantes e ceps são malucas assim, mas aos poucos vão sendo preenchidos os espaços de cep com novos representantes.

 A lógica é que os ceps iniciam em 010001000 e vão até 9999999.

 Então dentre cada parte de faixas de ceps terá um representante.

 Meu problema é o seguinte.

 Eu poderia cadastrar cada numero no mysql como sendo uma tabela chamada cep:

ID_CEP         CEP
1                 010001000
2                 010001001
3                 010001002
4                 010001003
5                 010001004
6                 010001005
7                 010001006
8                 010001007
9                 010001008
10               010001009

 Mas imagina o tamanho da tabela.

 Assim eu poderia criar a tabela representante com id e nome e uma terceira tabela com o relacionamento.

 Mas viu a quantidade de CEPs ?

 Acredito que dê para fazer com faixas tipo:


ID             NOME                FAIXA_DE          FAIXA_ATE
1                 JOSE                 01001000            01002000
2                 MARIA               09999000            09999010
3                 JOAO                05555000            05555100
4                 JOSE                 01400999            01590999


 Então quando o funcionario do escritorio for procurar por uma área, um cep, ele terá como resultado o nome do representante.

" Nossa que loucura, será que consegui explicar direito ???"

Henrique Van Klaveren

unread,
May 17, 2007, 5:08:25 PM5/17/07
to php-b...@googlegroups.com

hummmm agora sim...

J kraca vamus ver o q dah pra fazer...

Vou ver aki e te mando alguma coisa na sequencia ok!?

Teh mais


De: php-b...@googlegroups.com [mailto:php-b...@googlegroups.com] Em nome de Nick Marinho


Enviada em: quinta-feira, 17 de maio de 2007 17:56
Para: php-b...@googlegroups.com

Marcelo Neves

unread,
May 17, 2007, 8:29:54 PM5/17/07
to php-b...@googlegroups.com
Vejo que você está imaginando uma única tabela. Você precisará de duas tabelas. Uma que guarda as informações dos representantes e outra que guarda as informaçãoes das faixas:

Tabela representante: id, nomeRepresentante, etc...

Tabela faixa: id, idRepresentante, iniciofaixa, fimFaixa

Então, assim na tabela faixa poderá haver mais de um registro apontando para um mesmo representante. Aí na consulta você faz como os camaradas dos posts anteriores explicaram. Na consulta pede pra retornar todas as faixas (inicio e fim) do representante de id x.

Ok? A consulta você sabe fazer?

Digamos que tenho o representante pelo nome "josé" e na tabela faixa tenho todas as faixas deste representante.

SELECT id, nomeRepresentante nomeRep, inicioFaixa, fimFaixa  FROM representante rep, faixa WHERE rep.nomeRep = "josé" AND faixa.idRepresentante = rep.id

mais ou menos assim...os caras que manjam mais vão poder te ajudar melhor...a
Em 17/05/07, Henrique Van Klaveren <klav...@gmail.com > escreveu:

hummmm agora sim...






--
Marcelo Neves
Programador

Henrique Van Klaveren

unread,
May 17, 2007, 9:10:12 PM5/17/07
to php-b...@googlegroups.com

Axo que eh por aew o caminho...

Mas assim axo que tem um jeitinho mais fácil...

Mas para isso precisamos verificar se a FAIXAS serão padrões EX

Fulano1 = faixa 11111-xxx

Fulano2 = faixa 11112-xxx

 

Se for eh mais simples que imaginamos J

Digamos que criaremos 2 tabelas como o Marcelo mencionou...

Nela vc criará tipo 2 colunas...

IDREPRESENTANTE, FAIXA

 

A outra tabela será a que vc já tem para o representante...

 

Blz feito isso na hora da pesquisa, vc pode separar o valor do valor solicitado...

Tipo limitando o que vc vai pesquisar de acordo com a faixa...

 

Se eu “Usuário” estiver consultando o cep “11112-320”, agente pega apenas o 11112 (numero da faixa) e faz o select no banco...

 

Ficaria assim...

 

$sql=”SELECT A.nome, B.faixa FROM tabela_representante A, tabela_faixas B

WHERE A.idrepresentante = AND B.idrepresentante

      AND B.faixa = $_POST[faixa]”;

 

Depois eh soh sair pro abraço J

Espero que tenha ajudado!!!

 

 

 


Nick Marinho

unread,
May 17, 2007, 9:40:32 PM5/17/07
to php-b...@googlegroups.com
 Entendi tudo o que vocês me disseram e agradeço grandemente pelas respostas de todos vocês amigos de cada dia :D

 As vezes quando sei o que dizer e posso eu ajudo a quem precisa.

 Bom, tudo o que vocês falaram está se encaixando direitinho.

 Mas digamos assim:

 A tabela que contém as faixas tem o JOSE e ele está na faixa 01001000 a 01099000.

 E uma pessoa consulta pelo cep: 01030999, como eu faço a query para poder descobrir de onde esse cep é, de qual faixa de qual representante pertence esse cep.

 Essa era minha dúvida principal.

 Pois fazer todo esse ligamento eu já entendia, e era justamente nessa hora de pesquisar que eu me perdí.

 O formulário vai ter alguns tipos de pesquisas diferentes: por nome de representante, por cidade, por cep.

 E nesse de cep que engavetou e não saia solução da minha pobre cabeça de jeito nenhum.

 Serão 1 tabela contendo os representantes e seus IDs, uma de CEP, contendo as FAIXAS e seus IDs, e poderia ter uma terceira com o relacionamento das 2.

 Mas a duvida GERAL, é: Como pesquisar numa forma que eu mande um número X de cep e eu sabia o representante que corresponde de tal faixa esse cep corresponde.

 Agradecido por todos que me ajudam nessa solução.

 Se precisarem de ajuda para otimização de sites me perguntem.

Henrique Van Klaveren

unread,
May 17, 2007, 10:23:15 PM5/17/07
to php-b...@googlegroups.com

Digamos que a pesquisa seja “01030999” ...

Então essa faixa pertence ao jose certo???

 

JOSÉ = INICIAL = 01001000 FINAL= 01099000

 

Bem então sabemos que a faixa do josé é a seguinte 01001 até a 01099-999 (digamos que aqui vc coloque o 999 em vez de 000 ok?)

Teremos então que tudu que está na range 010XX-XXX eh o josé??? Isso???

 

Digamos q exista o joão este inicia em 01101 e vai ate 011999 ok?

Então temos que a faixa do joão será a 011XX-XXX correto???

 

Entaum digamos que se eu “usuário” pesquisar o cep 01030999...

Suponhamos que esse valor venha como $_POST[CEP_PEQUISA]...

 

$cep_pesquisa = substr($_POST[CEP_PEQUISA],0,2);

$cep_pesquisa terá o valor de “010”

 

Então o 010XX-XXX pertence a faixa do jose???

O que axa???

 

 


De: php-b...@googlegroups.com [mailto:php-b...@googlegroups.com] Em nome de Nick Marinho


Enviada em: quinta-feira, 17 de maio de 2007 22:41
Para: php-b...@googlegroups.com

Nick Marinho

unread,
May 17, 2007, 11:13:44 PM5/17/07
to php-b...@googlegroups.com
 Sim e a coisa complica mais ainda.

 Eu não sei como montar a Query para pesquisar.

 Exemplo: Na região nordeste os ceps variam: 99999-000 99999-010 e por ai vai.

 Um representante pode representar locais diferentes.
 
 Tipo: o JOSE (continuemos com ele mesmo, esta funcionando =D) ele está numa faixa de 010001-000 ate 01099-999, ok!

 Então se eu pesquiso por um cep:  01030-000, como monto  essa query ?

 Esse é meu problema !

Henrique Van Klaveren

unread,
May 17, 2007, 11:41:31 PM5/17/07
to php-b...@googlegroups.com

Será que estamos progredindo???? :>

Bem se vc inserir todas as faixas para esse JOSE

Quando fizer a pesquisa vai retornar soh o jose daquela faixa não???

 

Tipo esquece o final da faixa...

Te baseia na parte inicial.... o fim da faixa vc não pode definir sempre como 999???

 

Tipo assim

 

NUM   NOME  FAIXA

01       JOSE   01030

02       JOAO   01040

03      PEDRO 01050

04       JOSE   01060

 

 

Tipo pegar soh o inicio do CEP ....

Pois o fim nesses casos seriam sempre o final 999

 

Entuam todas as pesquisas com akele inicio

Que determinariam a faixa que o representante esta....

 

Suponhetiemos que a consulta seja 01030-333 ok?

Se fizer como eu passei antes a

$CEP_PESQUISA = substr($_POST[CEP_PEQUISA],0,4);

 

Assim o CEP_PESQUISA será “01030”

Não importando o restante pois ele vai ser até o 999

Entaum apenas o inicio eh o que será útil...

 

Na pesquisa vc faz

Select * from faixas where faixa= $CEP_PESQUISA

 

Ele vai encontrar 1 registro...

Dizendo que eh o JOSE que esta nesse CEP!

 

 

 

 

 


De: php-b...@googlegroups.com [mailto:php-b...@googlegroups.com] Em nome de Nick Marinho


Enviada em: sexta-feira, 18 de maio de 2007 00:14
Para: php-b...@googlegroups.com

R.Lemos Empire NET

unread,
May 17, 2007, 11:59:40 PM5/17/07
to php-b...@googlegroups.com
rapaz, pq vc naum trabalha com numero inteiro ?
ae vc pode montar usando operadores matematicos < > betwenn...
fica mais facil assim

rapaz, acho q c está esquentando com uma coisa super simples de fz

como não gosto de entregar as coisas mastigadas vou te mostrar como
montaria um sistema para que colaboradores visitassem as casas de um
cjto habitacional, vamos colocar como se fosem valores dos ceps ok ?

primeira tabela seria das "faixas"

id auto increment int,inicio int,fim int

1,1,10
2,11,20
3,21,30
4,31,50
5,51,75
6,76,90


segunda tabela seria dos "colaboradores"

id auto increment int,nome
1,allan
2,maria
3,savio

terceira tabela seria dos relacionamentos entre um e outro "rel_col_faicas"

id auto increment int,id_faixa,id_colaborador
1,1,1
1,2,1
1,3,2
1,4,3
1,5,1
1,6,1

ae vc tem os relacionamentos das faixas com os colaboradores

essa é a forma mais correta de se fz isso, se vc não quiser ter
problemas lá na frente com a implementação de addons, com relação às
queris, fica um pouco mais complicado, mas aqui estamos falando de
programação robusta e não te tapa buracos correto ?

então para selecionar por exemplo quem vai ficar com a casa numero 73
no feijão com arroz eu faria alguma coisa assim

select colaboradores.nome
from faixas, colaboradores, rel_col_faixas
where $casa_pesquisa between faixas.inicio and faixas.fim
and rel_col_faicas.id_faixa = faixas.id
and rel_col_faicas.id_colaborador = colaboradores.id
limit 1

Vantagens, depois disso feito vc pode colocar uma tabela relacionada
de clientes (ou moradores) e com isso administrar mais informações
pelo programa, além do mais, um mesmo colaborador pode ficar com
faixas distintas e vc não vai ter q olhar para o db e dizer putz fiz
merda e agora ?

não sei se os codes estão certos, escrevi aqui rapidinho antes de ir
dormir, então o q vale é a idéia ok ?

espero ter ajudado


--
Cordialmente
Roberto Lemos
Consultor WEB

R.Lemos Empire NET

unread,
May 18, 2007, 12:05:02 AM5/18/07
to php-b...@googlegroups.com
rapaz, c tiveres querendo tirar umas duvidas me add no gtalk q eu
converso com vc, devo ficar mais uma meia hora aqui trabalhando, mas
por favor, podemos conversar sobre a lógica desse seu programa (mas
nada de codes prontos ok? estamos aqui para trocar idéias e não para
fazer programas pelos outros ;)
um grande abraço

Nick Marinho

unread,
May 18, 2007, 12:19:09 AM5/18/07
to php-b...@googlegroups.com
 Lemos, é exatamente isso mesmo.

 Não quero nada pronto, o meu problema está sendo realmente na hora de criar o BENDITO BETWEEN, me deixe pensando uns minutos.

 Estou seguindo nesse mesmo raciocínio seu.

 Se por ventura eu não chegar numa lógica que seja a desejada eu peço um help, mas nada de code pronto ^^

 Estamos aqui para trocar experiências mesmo e pensar juntos.

 Abraços... e muito obrigado por agora.

R.Lemos Empire NET

unread,
May 18, 2007, 12:29:55 AM5/18/07
to php-b...@googlegroups.com
ok, comece montando as tabelas do jeito q te falei e testando um
select nas 3 tabelas, assim fica bem simples de fazer a coisa certa,
apesar de alguns programadores não gostarem de trabalhar com select em
múltiplas tabelas é a forma mais correta de se amarrar o código de
maneira ágil deixando o db de fácil manutenção e rápido acesso

olha o exemplo q estou usando em uma loja de dvds q estou montando...

$query = "select loja_produtos.id, loja_produtos.valor,
loja_produtos.desconto, (loja_produtos.valor-loja_produtos.desconto)
as valor_final, loja_produtos.link, loja_produtos.desconto,
loja_produtos.titulo, loja_produtos.chamada, loja_produtos.duracao,
loja_produtos.ano_lancamento, loja_origens.titulo as origem from
loja_produtos, loja_origens where loja_produtos.produtora =
$produtora[id] and loja_origens.id = loja_produtos.origem order by
adicionado desc";


ainda tá meio cru pois tá em fase de testes :P mas consigo ótimos
resultados trabalhando assim, além do mais, os sites não ficam caindo
(é preciso se pensar nisso qdo vc se dedica a projetos com mais de 10
mil visitas dia ou com banco de dados com muitos registros) pois fica
complicado dar uma carroça para o cliente e depois pedir para ele
hospedar o site num servidor privado com 2 processadores e 2 gigas de
memoria rsrsrs


On 5/18/07, Nick Marinho <nickm...@gmail.com> wrote:

Reply all
Reply to author
Forward
0 new messages