Buscando do banco com WHILE [RESOLVIDO]

1. Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 26/08/2016 - 09:51h

Bom dia estou com um problema que acho estar relacionado com o posicionamento do array
Estou fazendo uma busca no banco e jogando para um WHILE:

Quando faço a busca e conteúdo o NÃO tem nomes compostas as variáveis são preenchidas normalmente Ex: "RiodeJaneiro",
mas se no banco estiver "Rio de Janeiro" ele joga uma parte de cada nome em uma variável ficando:

"State: Rio";
"City: de"
"Organization: Janeiro"

onde deveria ficar:

"State: Rio de Janeiro";
"City: Niteroi"
"Organization: Minha Empresa"



mysql -u MEUUSUARIO -pMINHASENHA -e "select NomeRepre,senha,CountryName,State,City,Organization,organizationalUnitName,CommonName,Email from MINHATABELA where status = 'Pendente'" MEUBANCO --skip-column-names| while read nomerepre senha CountryName State City Organization organizationalUnitName CommonName Email; do

echo "Nome: $nomerepre";
echo "Senha: $senha"
echo "Country: $CountryName"
echo "State: $State";
echo "City: $City"
echo "Organization: $Organization"
echo "OrganizationalUnitName: $organizationalUnitName"
echo "CommonName: $CommonName"
echo "Email: $Email"

Alguém tem alguma dica?








  


2. Re: Buscando do banco com WHILE [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/08/2016 - 12:07h

dpitta escreveu:
Bom dia estou com um problema que acho estar relacionado com o posicionamento do array
Estou fazendo uma busca no banco e jogando para um WHILE:
Quando faço a busca e conteúdo o NÃO tem nomes compostas as variáveis são preenchidas normalmente Ex: "RiodeJaneiro",
mas se no banco estiver "Rio de Janeiro" ele joga uma parte de cada nome em uma variável ficando:
"State: Rio";
"City: de"
"Organization: Janeiro"
onde deveria ficar:

"State: Rio de Janeiro";
"City: Niteroi"
"Organization: Minha Empresa"

mysql -u MEUUSUARIO -pMINHASENHA -e "select NomeRepre,senha,CountryName,State,City,Organization,organizationalUnitName,CommonName,Email from MINHATABELA where status = 'Pendente'" MEUBANCO --skip-column-names| while read nomerepre senha CountryName State City Organization organizationalUnitName CommonName Email; do

echo "Nome: $nomerepre";
echo "Senha: $senha"
echo "Country: $CountryName"
echo "State: $State";
echo "City: $City"
echo "Organization: $Organization"
echo "OrganizationalUnitName: $organizationalUnitName"
echo "CommonName: $CommonName"
echo "Email: $Email"
Alguém tem alguma dica?


-----------------------------------------------------------------
Boa tarde dpitta.

Qual o "separador de campo" (IFS), na saída do "select"?
Se for "espaço", troque-o por outro, e
Defina o "IFS" no "WHILE", tipo:
while IFS=":" read -r nomerepre senha CountryName State . . .

Att.:
Marcelo Oliver


3. Re: Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 26/08/2016 - 15:06h

Obrigado.
Então vc esta falando para eu quando for gravar no banco, gravar sem espaço substituindo o espaço por alguma coisa ex:
"Rio-de-Janeiro" e depois substituir o "-" por espaço vazio?



4. Re: Buscando do banco com WHILE

Thiago Martins
thinomar

(usa Debian)

Enviado em 26/08/2016 - 17:55h

Não, ele está falando para você mudar o IFS (dê uma pesquisada a respeito), que é o separador de campos, para um que se adeque a sua necessidade. Mas... tente com o While assim:
Mude isso:
while read 

Por isso:
while IFS= read 


Edit:
Se não der certo, tente deixar o IFS assim: IFS="\n". Ou assim: IFS="\t"


5. Re: Buscando do banco com WHILE [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 26/08/2016 - 18:08h

dpitta escreveu:

Obrigado.
Então vc esta falando para eu quando for gravar no banco, gravar sem espaço substituindo o espaço por alguma coisa ex:
"Rio-de-Janeiro" e depois substituir o "-" por espaço vazio?


Não é qdo for gravar no BANCO, é quando fizer o select no BANCO, defina o SEPARADOR DE CAMPOS (IFS).
Exemplo:
CAMPO01:CAMPO02:CAMPO03:CAMPO04: . . .

Marcelo Oliver


6. Re: Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 27/08/2016 - 12:31h

Amigos bom dia, Obrigado pela atenção de todos.
Mas eu devo ter explicado o meu problema de forma errada ou não estou entendendo nada.

Eu não quero separa nada, muito pelo contrario.. La no banco esta Ex: "Rio de Janeiro" quando eu faço o Select ao invés da variável receber o valor "Rio de Janeiro" Completo, esta recebendo apenas "Rio" o restante da palavra "de" esta sendo carregado sem eu querer na outra variável e o mesmo acontecendo para "Janeiro".

Como resolvo isso????
Obrigado



7. Re: Buscando do banco com WHILE [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/08/2016 - 13:38h

dpitta escreveu:

Amigos bom dia, Obrigado pela atenção de todos.
Mas eu devo ter explicado o meu problema de forma errada ou não estou entendendo nada.

Eu não quero separa nada, muito pelo contrario..
La no banco esta Ex: "Rio de Janeiro" quando eu faço o Select ao invés da variável receber o valor "Rio de Janeiro" Completo, esta recebendo apenas "Rio" o restante da palavra "de" esta sendo carregado sem eu querer na outra variável e o mesmo acontecendo para "Janeiro".
Como resolvo isso????
Obrigado

Dpitta, boa tarde.
Muita calma nesta hora . . . :)
Ninguem esta mandando/pedindo para separar . . .
O que estou "aconselhando", no sentido de que você obtenha o resultado esperado,
é que "DEFINA" o "SEPARADOR DE CAMPO", na SAíDA do SELECT!!!!

Segue exemplo:
cat TESTES.txt #SEM SEPARADOR DE CAMPO
São Paulo São Paulo MINHA EMPRESA Marcelo S. Oliver 


SIMULANDO O SEU PROBLEMA:
cat TESTES.txt|while read EST CID EMP NOME;do echo -e "EST:$EST\nCID:$CID\nEMP:$EMP\nNOME:NOME";done 

EST:São
CID:Paulo
EMP:São
NOME:Paulo MINHA EMPRESA Marcelo S. Oliver


SOLUCIONANDO:
cat TESTES.txt #COM SEPARADOR DE CAMPO
São Paulo:São Paulo:MINHA EMPRESA:Marcelo S. Oliver 


cat TESTES.txt|while IFS=":" read EST CID EMP NOME;do echo -e "EST:$EST\nCID:$CID\nEMP:$EMP\nNOME:$NOME";done 

EST:São Paulo
CID:São Paulo
EMP:MINHA EMPRESA
NOME:Marcelo S. Oliver

CONCLUSãO:
Se não tiver um "SEPARADOR DE CAMPO", NÃO VAI DAR CERTO!!!!
O "read" não tem como ADIVINHAR/DEDUZIR o que é um "NOME COMPOSTO" e o que é o CAMPO SEGUINTE!!!
Att.:
Marcelo Oliver




8. Re: Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 27/08/2016 - 16:06h

ok entendi você esta usando ":" como separado pois na sua frase os 2 ":" pontos separam o seu texto.
Mas no meu caso que o conteúdo esta esta gravado no banco de dados, não existe nenhum separador em comum que eu tenha como usar, apenas cada palavra esta na sua coluna na tabela.


9. Re: Buscando do banco com WHILE

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 27/08/2016 - 20:42h

dpitta escreveu:

ok entendi você esta usando ":" como separado pois na sua frase os 2 ":" pontos separam o seu texto.
Mas no meu caso que o conteúdo esta esta gravado no banco de dados, não existe nenhum separador em comum que eu tenha como usar, apenas cada palavra esta na sua coluna na tabela.


------------------------------------------------------------------------------------------
Dpitta, não existe "milagre", sistemas e aplicativos não são videntes . . . :)
A sua frase "não existe nenhum separador em comum que eu tenha como usar, apenas cada palavra esta na sua coluna na tabela"
Não esta correta!!!!
O MYSQL utiliza "\t" como IFS.
Não disse antes, pq não sabia!!! Nunca usei o mysql no linux . . . Pesquisei e encontrei . . .
Bom, para resolver seu problema, é simples. (acho que sim . . .)

mysql -u MEUUSUARIO -pMINHASENHA -e "select "VARIOS CAMPOS" from MINHATABELA where status = 'Pendente'" MEUBANCO --skip-column-names| while IFS=$'\t' read nomerepre senha CountryName State City Organization organizationalUnitName CommonName Email;do
echo "Nome: $nomerepre";
echo "Senha: $senha"
echo "Country: $CountryName"
echo "State: $State";
echo "City: $City"
echo "Organization: $Organization"
echo "OrganizationalUnitName: $organizationalUnitName"
echo "CommonName: $CommonName"
echo "Email: $Email"
done

É isso ai.....
Se não resolver, envie a saída do select para um arquivo txt para que eu possa analisar . . .
=> PARA "MASCARAR" SEUS DADOS, TROQUE OS CARACTERES COM O SED... <=

Exemplo:
sed 'y/LNAIUVX/9173582/' <<< "VIVA O LINUX"
8387 O 93152

Att.:
Marcelo Oliver
Obs.: SE A RESPOSTA foi esclarecedora, marque a como A MELHOR . . . :)



10. Re: Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 29/08/2016 - 09:48h

Show, Funcionou...
Obrigado


11. Re: Buscando do banco com WHILE

Thiago Martins
thinomar

(usa Debian)

Enviado em 29/08/2016 - 11:08h

msoliver sempre paciente e prestativo. Muito bom!

dpitta, o que o msoliver quer dizer com "separador de campos" é... vou dar um exemplo prático.

Vamos supor que você tenha uma tabela chamada Pessoa, e ela tenha os atributos id, nome, sexo, idade. Quando você faz uma query nessa tabela, os resultados terão de apresentar dois tipos de divisões para que você consiga compreende-los, e esses divisores são os de rows (linhas) e de fields (campos). Supondo que os divisores de fields sejam TABs (\t) e de rows sejam NEW LINEs (\n), o resultado de uma query com duas rows viria assim:
1\tThiago Martins\tMasculino\tVinte e dois\n2\tJeniffer Marques\tFeminino\tVinte e dois

Como o while pega de record em record (row em row), então ele já entenderia o separador de rows padrão, que é o \n (NEW LINE), e o que ele receberia seria isso a seguir, que ele processaria linha a linha:
1\tThiago Martins\tMasculino\tVinte e dois
2\tJeniffer Marques\tFeminino\tVinte e dois

Sendo assim, basta alterar o FIELD SEPARATOR (IFS) do while para que ele reconheça o separador de campos, que nesse caso é o TAB (\t). Alterando, ele reconhecerá assim:
Campos Linha 1:
1
Thiago Martins
Masculino
Vinte e dois

Campos Linha 2:
2
Jeniffer Marques
Feminino
Vinte e dois

Não alterando, ele reconhecerá assim, visto que não saberá qual delimitador você utiliza:
Campos Linha 1:
1
Thiago
Martins
Masculino
Vinte
e
dois

Campos Linha 2:
2
Jeniffer
Marques
Feminino
Vinte
e
dois

Conseguiu compreender?


12. Re: Buscando do banco com WHILE [RESOLVIDO]

Daniel
dpitta

(usa Debian)

Enviado em 29/08/2016 - 11:16h

Sim entendido.. Show Valeu!!!






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts