Ir para conteúdo

POWERED BY:

Arquivado

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

alissonxx

[Resolvido] Comparando resultado de 2 Query's

Recommended Posts

No código abaixo é feita a comparação de 2 querys, através do campo UserName

 

$sql="SELECT UserName FROM radreplies where Attribute='Framed-Pool' AND Empresa='$empresa_escolhida' ";

$qry=mysql_query($sql);

while($row=mysql_fetch_array($qry))

{

 

$UsuarioBloqueado=$row['UserName'];

$Att_Bloqueado=$row['Attribute'];

 

$sql2="SELECT * from radchecks WHERE UserName!='$UsuarioBloqueado' GROUP BY UserName";

$qry2=mysql_query($sql2);

while($row2=mysql_fetch_array($qry2))

{

$UsuarioAtivo=$row2['UserName'];

 

 

if($UsuarioAtivo==$UsuarioBloqueado)

{

 

 

}

else

{

echo"<br>$UsuarioAtivo ativo";

 

 

}

}

}

 

a saida é

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

todos os registros ele mostra assim

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ta, e qual sua duvida, problema, necessiade,...?

 

minha necessidade é pegar os usuarios que não estão bloqueados no sistema.

 

a primeira query eu seleciono todos os bloqueados

 

$sql="SELECT UserName FROM radreplies where Attribute='Framed-Pool' AND Empresa='$empresa_escolhida' ";

na segunda query eu tenho que comparar os bloqueados com todos os usuarios e retirar os bloqueados, mostrando somente os ativos

 

$sql2="SELECT * from radchecks WHERE UserName!='$UsuarioBloqueado' GROUP BY UserName";

ambas tabelas tem o campo UserName que é usado pra diferenciar os ativos dos bloqueados,

 

mas a saída está sendo essa

 

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

aaaa ativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá... Não é mais fácil já na primeira query selecionar somente os ativos??? Qual a condição pra saber se ele está ativo ou bloqueado?

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

a condição para verificar se é ativo

 

é se o UserName estiver cadastrado na tabela radreplies e possuir um registro de Attributo='Framed-Pool'

 

que é feito nessa primeiora query

 

$sql="SELECT UserName FROM radreplies where Attribute='Framed-Pool' AND Empresa='$empresa_escolhida' ";

nisso eu pego os nomes dos usuarios bloqueados.

 

 

 

pro cara estar ativo ele tem um registro na radchecks(dados do cliente) e pode ter registro na radreplies(estados), ele pode ter atributos de ip e rota, menos o de Framed-Pool, senão ele está bloqueado.

 

 

$sql2="SELECT * from radchecks WHERE UserName!='$UsuarioBloqueado' GROUP BY UserName";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Leia de novo esta parte do teu POST... Aqui você se contradiz...

 

a condição para verificar se é ativo // VERIFICAR SE É ATIVO

 

é se o UserName estiver cadastrado na tabela radreplies e possuir um registro de Attributo='Framed-Pool'

 

que é feito nessa primeiora query

 

QUOTE

$sql="SELECT UserName FROM radreplies where Attribute='Framed-Pool' AND Empresa='$empresa_escolhida' ";

 

nisso eu pego os nomes dos usuarios bloqueados.// BLOQUEADOS OU ATIVOS???

Pela tua explicação lá de cima, o SELECT tá retornando os ativos... e não os bloqueados...

 

Tenta explicar melhor a lógica pra saber se é ativo pra eu poder te ajudar... Mas com certeza dá pra resolver usando só uma query...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok

 

 

radchecks > dados do usuario

radreplies > estados do usuario

 

as 2 tabelas possui o campo UserName

 

para o cara estar ativo

 

ele pode ter registros em radchecks(todos dados) e radreplies(ip e rede)

 

para ele estar bloqueado

 

ele pode ter registros em radchecks(todo os dados) e no radreplies(framed-pool)

 

se o usuario tem framed-pool ele está bloque

 

senao

 

ele está ativo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que isso tudo mano.

Basta criar uma coluna "bloqueado", e indicar 2 valores que indicaram se ele esta bloqueado ou não.

Exemplo:

 

1 => Bloqueado

0 => Não bloqueado

 

Com isso tu faz só uma query simples.

 

Simplifique as coisas, em vez de complica-las

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tava pensando... Nem precisa criar o campo bloqueado. Se estiver framed-pool o cara tá bloqueado, se estiver outra coisa tá ativo... É isto?

se o usuario tem framed-pool ele está bloquedo

Se for, faz a query assim

 

$sql="SELECT UserName FROM radreplies where Attribute != 'Framed-Pool' AND Empresa = '$empresa_escolhida' ";

Vai retornar os que estão ativos.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tava pensando... Nem precisa criar o campo bloqueado. Se estiver framed-pool o cara tá bloqueado, se estiver outra coisa tá ativo... É isto?

se o usuario tem framed-pool ele está bloquedo

Se for, faz a query assim

 

$sql="SELECT UserName FROM radreplies where Attribute != 'Framed-Pool' AND Empresa = '$empresa_escolhida' ";

Vai retornar os que estão ativos.

 

Carlos Eduardo

 

 

não dá, pois na radreplies são apenas estados do usuário, nem todos os usuários tem registro lá.

 

 

todos os usuários ficam na radchecks.

 

eu tenho q seleciona os q tem framed-pool da radreplies e comparar com a radchecks e tirar os bloqueados da radreplies

Compartilhar este post


Link para o post
Compartilhar em outros sites

Porque você não faz como o André D. Molin colocou?

 

Para que isso tudo mano.

Basta criar uma coluna "bloqueado", e indicar 2 valores que indicaram se ele esta bloqueado ou não.

Exemplo:

 

1 => Bloqueado

0 => Não bloqueado

 

Com isso tu faz só uma query simples.

 

Simplifique as coisas, em vez de complica-las

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não der pra fazer como o André sugeriu, você pode fazer assim (teoricamente, não testei e nem sei se vai funcionar).

$sql2="SELECT * from radchecks 
WHERE UserName NOT IN (SELECT UserName FROM radreplies where Attribute = 'Framed-Pool') AND Empresa = '$empresa_escolhida' ";

Volto a dizer, não sei se vai funcionar, nem sei qual vai ser o desempenho, mas é uma idéia.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É q que esses atributos são para o servidor,

 

e ele detecta os bloqueados através do attributo='pool_acessonegado'

 

que está na tabela radaccts(estados do usuario)

 

e o cadastro do cara ta em radchecks(dados do usuario)

 

eu tenho que selecionar os usuarios que nao possuem 'pool_acessonegado' da tabela radaccts e retirar da radchecks

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então lógica que você colocou no início está errada. Coloca a lógica completa pra poder te ajudar... E outra coisa... Porque não faz assim????? Muito mais simples...

 

Porque você não faz como o André D. Molin colocou?

 

Para que isso tudo mano.

Basta criar uma coluna "bloqueado", e indicar 2 valores que indicaram se ele esta bloqueado ou não.

Exemplo:

 

1 => Bloqueado

0 => Não bloqueado

 

Com isso tu faz só uma query simples.

 

Simplifique as coisas, em vez de complica-las

Carlos Eduardo

 

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

a logica é a seguinte.

 

tabelas

 

radchecks(dados do usuario)

radreplies(estados do usuario, podendo ser ip,rota ou framed-pool)

 

o campo de ligação das 2 tabelas é o UserName.

 

se ele possuir os valores abaixo nas 2 tabelas, entao o usuario alisson está bloqueado

radchecks.UserName=Alisson

radreplies.UserName=Alisson e radreplies.Attribute=Framed-Pool

 

 

se for somente os codigos abaixo, entao ele está liberado,

radchecks.UserName=Alisson

 

ou

 

radchecks.UserName=Alisson

radreplies.UserName=Alisson e radreplies.Attribute=Rota Ou radreplies.Attribute=ip

entende?

 

eu tbm tentei desta forma.

 

$sql2="SELECT * from radchecks

WHERE UserName NOT IN (SELECT UserName FROM radreplies where Attribute = 'Framed-Pool') AND Empresa = '$empresa_escolhida' ";

mas nesse select interno ele só pega o primero username, se eu colocar Limit da erro no mysql dizendo que há mais de um valor

 

$sql2="SELECT * from radchecks

WHERE UserName NOT IN (SELECT UserName FROM radreplies where Attribute = 'Framed-Pool' limit 0,100) AND Empresa = '$empresa_escolhida' ";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim

$sql = "SELECT * from radchecks rc
JOIN radreplies rp USING (UserName)
WHERE rp.Attribute != 'Framed-Pool' AND rc.Empresa = '$empresa_escolhida'";// Só tem que ver onde está a empresa escolhida... rc ou rp..

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, testei a sua query

 

e ele retornou somente alguns registros de uma tabela de centenas

 

eu tenho que retornar os nomes ativos de radchecks, retirando os bloqueados de radreplies

 

e está complicado fazer isso

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara é fácil de resolver só é dificil de de entender rs..

Diz uma coisa... quando você diz retirando os bloqueados do radreplies você diz excluir, mudar o status, ou não aparecer na lista??

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.