Ir para conteúdo

POWERED BY:

Arquivado

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

Marcelo Diniz

Problemas com select dentro de loop

Recommended Posts

Ola,

 

já tinha começado um tópico que era o problema do xml, mas pelo visto não tem a ver com o XML e sim com programação, ou algo assim, então achei que seria mais viavel abrir outro tópico.

 

Vamos la.

 

Tenho uma query que retornaria uns 100 registros, nada de mais.

 

Faço um loop para começar a trabalhar com essa query, preciso verificar dados e tudo mais então preciso fazer uma query dentro deste laço, e outra query dentro do laço da última query. Meio confusso e trabalhoso, principalmente para o browser que não suporta a qtde de informações.

 

Como eu posso resolver isso?

alguem tem alguma dica para me dar para eu poder melhorar esse "pequeno" trecho de código?

 

Para se terem uma idéia do que estou fazendo

 

...
$sql = select cod, nome from tabela1 order by nome;
$result = mysql_query($sql) or die ("Erro na query: ".$sql);

while($rs = mysql_fetch_array($result)) {
   $nome = $rs['nome'];
   $cod = $rs['cod'];
   
   $sql02 = "select codigo from tabela2 where cod = ".$cod."";
   $result02 = mysql_query($sql02) or die ("Erro na query: ".$sql02);
   while($rs02 = mysql_fetch_array($result02)) {
    echo $codigo;
   }
}
...

 

 

e por ai vai, é mais ou menos isso, mas coloquei só um exemplo mesmo, nem sei se funfa esse cod que digitei na presa..... mas a ideia é essa, mas tenho que melhorar isso, pq dentro do segundo loop tem mais dentro ainda e ai loooonge

 

Caso queira ver o código mesmo olhe esse link, já fiz alguns ajustes conforme me deram umas dicas, mas não mudou em nada ainda....

http://forum.imasters.com.br/index.php?/topic/376668-problemas-com-xml/

 

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo,

 

Pelo que vi no tópico anterior e nesse tópico, existem várias falhas graves em toda a estrutura lógica e isso está trazendo como consequencia esses problemas.

 

O problema desse tópico está na sua consulta, ela deveria estar assim:

 

SELECT t1.cod, t1.nome,t2.codigo
FROM tabela1 as t1
LEFT JOIN tabela2 as t2 USING(cod)
ORDER BY t1.nome;

 

Dessa forma, você eliminará um loop desnecessário:

 

$sql = <<<SQL
SELECT t1.cod, t1.nome,t2.codigo
FROM tabela1 as t1
LEFT JOIN tabela2 as t2 USING(cod)
ORDER BY t1.nome;
SQL;

$result = mysql_query($sql) or die ("Erro na query: ".$sql);

while ( ( $rs = mysql_fetch_array($result) ) !== false ){
$nome = $rs['nome'];
$cod = $rs['cod'];
$codigo = $rs['codigo'];

echo 'Nome: ' , $nome , '<br />Cod: ' , $cod , '<br />Código: ' , $codigo; 
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok joão batista, obrigado e vou estar verificando, mas só vou poder ver isso amanha.

 

Assim que ver posto se por acaso consegui resolver, e hj vou dar uma olhada em join , pois ainda me perco um pouco com isso, não que eu não consiga fazer relacionamentos dO tipo:

 

SELECT TB1.UF TB2.CIDADE
FROM TB_UF AS TB1, TB_CIDADE AS TB2
WHERE TB1.ID_UF = TB2.ID_UF
ORDER BY TB1.UF

por exemplo, mas fazer usando join ainda nunca cheguei a olhar e sei que é BEEEMMMM melhor.

 

então até amanha.

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

por exemplo, mas fazer usando join ainda nunca cheguei a olhar e sei que é BEEEMMMM melhor.

 

Cara, tanto faz você fazer o o equi-join com JOIN ou com o WHERE.. nenhum é melhor que o outro.

 

JOIN é apenas uma sintaxe alternativa, acredito que para deixar mais legível.

 

por exemplo:

SELECT TB1.UF TB2.CIDADE
FROM TB_UF AS TB1, TB_CIDADE AS TB2
WHERE TB1.ID_UF = TB2.ID_UF
ORDER BY TB1.UF
é o mesmo que:

SELECT TB1.UF TB2.CIDADE
FROM TB_UF AS TB1
INNER JOIN TB_CIDADE AS TB2
ON TB1.ID_UF = TB2.ID_UF
ORDER BY TB1.UF
e o mesmo que:

SELECT UF, CIDADE
FROM TB_UF 
JOIN TB_CIDADE USING (ID_UF)
ORDER BY TB_UF.UF

Mas acredite, não é 'só isso' o teu problema. Por isso pedi no outro tópico para você postar o schema das tabelas.

Aquelas querys que você dispara para cada um dos Cod_Produto podem ser otimizadas na certa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo William, pelo que estive pesquisando por aqui não é um bicho de sete cabças não, dai é só começar a aprender um pouco mais e saber quando usar o inner join, o left join e o right join, mas nada de mais, claro, tenho que estudar bastante, mas pelo que vi já deu para se ter uma boa idéia, ainda mais que onde trabalhei era normal eu ter que fazer uns relacionamentos loucos entre varias e várias tabelas, aprendi bem a parte de banco de dados.

 

O meu maior problema mesmo é o que como já disse, pegar esse sistema no meio do caminho, muito mal escrito e nada documentado, e ter que dar continuidade, mas estou nesse barco para continuar. Só para se ter uma idéia, o outro programador, se é que se pode chamar assim, pegou a primeira tela do sistema, saiu copiando e colando e alterando o que se precisava, e cada código mais horrivel que o outro, nem no meu primeiro sisteminha fiz coisa pior. E o pior que o coordenador do projeto, q nao entende nada de desenvolvimento web, comentou que não quer que eu pare e refassa o sistema, disse para entregar a primeira parte, a dos cadastros e algumas outras coisas, que só falta essa parte que estou pedindo ajuda pra vcs, e depois dai sim, reescrever o sistema, que é onde vou começar a ver se aprendo POO, coisa que estou já me familiarizando, mas não vou usar nenhum framework por enquanto.

 

Só dei essa explicação para vcs entenderem como esta minha situação.

 

Mas vamos la, bola pra frente e vamos ver no que vai dar.

 

Assim que eu chegar amanha na empresa, vejo se consigo jogar as tabelas no ACESS mesmo e posto, dai imagino que até me ajudara tbm, coisa que eu já deveia ter feito.

 

Mas muito obrigado a todos mesmo.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom Dia a todos.

 

Cheguei aqui o mais cedo possivel hj e já consegui pelo menos jogar pegar as tabelas que estão sendo usadas no código em si.

 

Espero que possa ajudar e agradeço muito mesmo pela ajuda que todos vem me dando.

 

##SQL SERVER##
TABELA SelectPrincipal
Cod			varchar(50)
CodCliente		varchar(50)
NomeCliente		varchar(150)
CodMandatario		varchar(50)
NomeMandatario		varchar(150)
CodOperador		varchar(50)
NomeOperador		varchar(150)
DI			numeric(18,0)
DOL			numeric(18,0)
FRC			numeric(18,0)
IND			numeric(18,0)
ODO			numeric(18,0)
ODI			numeric(18,0)
OID			numeric(18,0)
USD			numeric(18,0)
PAP			numeric(18,0)
OUT			numeric(18,0)
Total			numeric(18,0)
Percentual		varchar(500)

---------------------------------------
##MYSQL##
TABELA Grupos
Cod_Grupo	int(11)
NomeGrupo	varchar(40)
Processa	int(11)

TABELA grupos_clientes
Cod_GrupoCliente	int(11)
Cod_Grupo		int(11)
CodAttivo		varchar(20)

TABELA metas
Cod_Meta		int(11)
Rec_Deleted		smallint(6)
Rec_Edit		smallint(6)
Rec_Notes		longtext
Cod_Produto		varchar(11)
Periodo			varchar(11)
Ordem			int(11)
Dt_Inicio		datetime
Dt_Fim			datetime
Valor			decimal(10,2)
Cod_Cliente		varchar(11)
User			varchar(20)
Dt_Modificacao		datetime
Cod_Mandatario		int(11)

TABELA tmpclientes
CodAttivo	varchar(255)
NMCliente	varchar(255)

TABELA tmpmandatarios
Cod_Cliente		varchar(20)
Nome_Mandatario		varchar(200)
Cod_Produto		varchar(20)
Cod_Mandatario		int(11)

No SQL SERVER essa é a unica tabela que tenho acesso até para visualizar.

 

E no MySQL estas são as tabelas que vi que estão sendo usadas no código, mas tenho acesso a base inteira.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No SQL SERVER essa é a unica tabela que tenho acesso até para visualizar.

E no MySQL estas são as tabelas que vi que estão sendo usadas no código, mas tenho acesso a base inteira.

 

Certo, temos algumas tabelas, qual é o objetivo final ?

 

Você quer recuperar os dados dessas tabelas dos dois SGBD e montar um XML ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente, conforme o código postado http://forum.imasters.com.br/index.php?/topic/376668-problemas-com-xml/

 

Pois os dados do SQL SERVER é o que me traz as somas e o restante dos dados como nomee e codigos são do MySQL.

 

Hj já esta sendo mostrado os dados, conforme necessario, mas tive que colocar um LIMIT 0,25 na query que pega o nome e o codigo do grupo.

 

Valew

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, se alguem puder me ajudar com esse caso, pois hj consegui fazer rodar com a base inteira, nada muito grande, e já esta demorando em média 30 segundos para mostrar os dados.... algo que acaba sendo ridículo.....

 

Hj vou ver se monto o diagrama das tabelas todas de todos os Bancos que uso, assim imagino que possa ficar bemmm mais facil pra mim mesmo.

 

Mas se alguem já souber de algo que possa vir me ajudar.

 

Ah e o DBDesigner é um bom software para eu poder fazer esse diagrama ou tem outro melhor ou mais simples?

 

Abs

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não conheço o DBDesigner, mas se existe a ferramenta desenvolvida pela criadora do MySQL, porque não utilizá-la? Esta nova versão, se não me engano, combina o MySQL Query Browser e o Administrator.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi. Já baixei aqui e já instalei, simples e facil, agora vou ser se consigo usar, mas qq coisa faço no DBDesigner por enquanto pois tempo é o que mais me falta.

 

Mas valew mesmo pela força

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.