Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

shauss

PHP/Mysql duvida comparação de dados.

Recommended Posts

shauss

Boas,

a minha db tem por exemplo os campos cpo_cod3(os 3 numeros do codigo postal),cpo_cod4(os 4 numeros do codigo postal),art_desig(morada),nporta.

então o meu problema é o seguinte, eu tenho por exemplo estas 3 moradas:

1111-123 rua da esquina nºimpares de 3 a 29

1111-124 rua da esquina nºpares de 2 a 24

1234-125 rua da esquina seg.social

eu queria que quando ocorre-se essa situação me retorna-se "morada vaga" mas em vez disso ele retorna a 1ª morada e só depois escreve "morada vaga" fica algo do género:

1111-123 rua da esquina nºimpares de 3 a 29

morada vaga.

O código que estou a utilizar é:

$sql="SELECT *
FROM cpo_cod_pos, ficheiro
WHERE cpo_cod_pos.art_desig LIKE ficheiro.art_nome and cpo_cod_pos.loc_dsc LIKE ficheiro.art_local";
$resultado = mysql_query($sql,$ligacao);
$row3=mysql_num_rows($resultado);
	for ($i=0; $i<$row3; $i++)
	{
		$reg=mysql_fetch_array($resultado); 
		$reg['IDmorada'] = str_replace("%","",$reg['IDmorada']);
		if ($repeticao==$reg['art_desig']){
		if ($repcp4!=$reg["cpo_cod4"] and $repcp3!=$reg["cpo_cod3"]){
			echo '<tr><td>'.$reg['IDmorada'].'</td>';
			echo '<td align="center" colspan="8">morada vaga</td>';
			}
		}else{

Desde já agradeço a vossa ajuda.

Cumps,

SHAUSS

Share this post


Link to post
Share on other sites
brunoais

Se ele aparece "morada vaga", eu n encontro aonde é q isso aparece neste código. Preciso de mais código para te ajudar


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

Se ele aparece "morada vaga", eu n encontro aonde é q isso aparece neste código. Preciso de mais código para te ajudar

já alterei o post inicial pode ser que assim já percebas melhor. quanto ao código o resto é só escrever os dados mas se for realmente necessário eu posto aqui.

Share this post


Link to post
Share on other sites
brunoais

Quantos resultados é q ele dá?

+:

Tu n indicas o q é q pesquisas e até procuras com o like

Mostra aí o q tens nessas células. Temo ("cheira-me") que estejas a usar wildcars sem querer.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

Quantos resultados é q ele dá?

+:

Tu n indicas o q é q pesquisas e até procuras com o like

Mostra aí o q tens nessas células. Temo ("cheira-me") que estejas a usar wildcars sem querer.

Tabela Ficheiro

ID art_nome art_local

6 %rua%rosa%araujo% %lisboa%

8 %rua%afonso%henriques% %serra%da%silveira%

os resultados que dá é:

  ID no ficheiro Original: Código postal                     Artéria:

        6                           1250-194  LISBOA                 Rua Rosa Ara�jo

        6                                   morada vaga

        8                           2605-125  BELAS Rua Dom Afonso Henriques

o que eu queria que aparecesse era:

  ID no ficheiro Original: Código postal                     Artéria:

        6                                   morada vaga

        8                           2605-125  BELAS Rua Dom Afonso Henriques

Share this post


Link to post
Share on other sites
brunoais

Responde a isto sff:

Porque é que usas o like?

Qual a função do %?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

Responde a isto sff:

Porque é que usas o like?

Qual a função do %?

Uso o like porque me parece a forma mais simples de fazer uma comparação de strings.

Não sei muito bem explicar, mas assim de uma forma geral penso que por exemplo se tiver %$string% para alem de procurar $string em si procura também a $string com algo ha frente ou atras. epah se me tavas a "testar" presumo que falhei se não sabes mesmo o melhor é googlar q eu sou um tosco neste aspecto  :wallbash:

Share this post


Link to post
Share on other sites
yoda

eu queria que quando ocorre-se essa situação me retorna-se "morada vaga" mas em vez disso ele retorna a 1ª morada e só depois escreve "morada vaga" fica algo do género:

1111-123 rua da esquina nºimpares de 3 a 29

morada vaga.

O código que estou a utilizar é:

		if ($repcp4!=$reg["cpo_cod4"] and $repcp3!=$reg["cpo_cod3"]){
			echo '<tr><td>'.$reg['IDmorada'].'</td>';
			echo '<td align="center" colspan="8">morada vaga</td>';
			}

Estás a dizer para escrever morada vaga e a morada na mesma condição .. não percebo o que queres ..

Share this post


Link to post
Share on other sites
shauss

Estás a dizer para escrever morada vaga e a morada na mesma condição .. não percebo o que queres ..

nao.. eu estou a escrever o ID correspondente ha morada e digo que a morada é vaga.

Share this post


Link to post
Share on other sites
brunoais

@yoda

Eu já pensei tb nisso. Mas é só um id, supostamente n incomoda.

E além disso, pelo q ele mostra aquilo é num novo <tr> e não num novo <td>. Se fosse num novo <td> é q poderia ser algo com o IDmorada.

Uso o like porque me parece a forma mais simples de fazer uma comparação de strings.

Não sei muito bem explicar, mas assim de uma forma geral penso que por exemplo se tiver %$string% para alem de procurar $string em si procura também a $string com algo ha frente ou atras. epah se me tavas a "testar" presumo que falhei se não sabes mesmo o melhor é googlar q eu sou um tosco neste aspecto  :wallbash:

É q tens aí um:  $reg['IDmorada'] = str_replace("%","",$reg['IDmorada']);

e pareceu-me que estavas a usar o simbulo % para separar dados.

o % e o _ em SQL são wildcards, há q ter atenção a isso.

add:

N sei se sabes mas é bom avisar:

Nunca uses wildcards para simplificar coisas, usa-os qd queres pesquisar algo q não sabes o q é mas sabes parte do q é.

Se tens nomes de ruas, etc... só se, por exemplo, um utilizador quiser procurar é q usas wildcards, senão usa literals.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

eu uso os % porque me dá mais garantias de resultado correcto. E apenas nesta questão me está a falhar alguma coisa, até porque o meu 'stor' de programação já me disse que na teoria tá certo e não sabe onde possa estar o erro.

Share this post


Link to post
Share on other sites
brunoais

se calhar o erro está noutro sítio


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

Corre a query no phpmyadmin e vê se devolve o resultado correcto.

no phpmyadmin apareceram as 3 moradas.

Share this post


Link to post
Share on other sites
brunoais

o q é q o:

$reg['IDmorada']

tem gravado?


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
shauss

o q é q o:

$reg['IDmorada']

tem gravado?

tem gravado o ID do registo correspondente na tabela ficheiro.

Acho que farias melhor em usar regex para verificar a integridade da morada, e há pela net snippets de código para verificar códigos postais, entre muitas outras coisas.

eu ainda sou "noob" em php portanto nao faço a minima do que sejam esses termos que acabas-te dizer  :wallbash: (regex,snippets)

Share this post


Link to post
Share on other sites
shauss

O que tu queres é verificar se uma morada segue determinadas regras, certo?

Não, eu quero que quando as moradas forem iguais e o codigo postal de 4 numeros(cp4) for diferente aparecer vago, o problema que eu acho que seja é que aquela morada tem dois cp4's iguais e um diferente e isso também devia contar mas ele escreve a primeira morada e depois as outras duas já faz o que devia.

Share this post


Link to post
Share on other sites
shauss

Deixa aí as tais moradas que estão na base de dados.

 

Cp4  cp3 local                        Artéria                              nporta

1500-423  LISBOA Pra�a Marechal Humberto Delgado

1250-194  LISBOA Rua Rosa Ara�jo           Impares de 1 a 59

1250-195  LISBOA Rua Rosa Ara�jo             Pares de 2 a 34

1269-183  LISBOA Rua Rosa Ara�jo                 43

2605-125  BELAS Rua Dom Afonso Henriques

Isto são as moradas que estou a usar porque eu tenho muitas moradas.

Share this post


Link to post
Share on other sites
yoda

Então o que disseste não faz sentido.

Tens 2 moradas com o Cp4 igual e a morada igual, e com o Cp3 diferente. Suponho que o que querias dizer era que quando o Cp3 é diferente e os outros 2 iguais, que a morada é vaga.

Aquilo que pretendes é o quê exactamente? Impedir que moradas iguais sejam inseridas?

Já agora, http://www.ctt.pt/feapl/jsp/validarmorada/public/validarmorada.jsf?lang=def

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.