Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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
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
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";
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
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
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
Pois é... Concordo com o André D. Molin.
Carlos Eduardo
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
>
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
alguma sugestao? http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif
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
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
É 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
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
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' ";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
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
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??
Tá... Eu que fiz errado... Sempre me confundo com os Join da vida...
$sql = "SELECT * from radchecks rc
LEFT OUTER 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..
Se der algum erro, troca por este.
$sql = "SELECT * from radchecks rc
LEFT OUTER JOIN radreplies rp ON rp.UserName = rc.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
Tá... Eu que fiz errado... Sempre me confundo com os Join da vida...
$sql = "SELECT * from radchecks rc
LEFT OUTER 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..
Se der algum erro, troca por este.
$sql = "SELECT * from radchecks rc
LEFT OUTER JOIN radreplies rp ON rp.UserName = rc.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
Tem como algum moderador excluir os meus post duplicados??
Grato
Carlos Eduardo
>
$sql2="SELECT * from radchecks
WHERE UserName NOT IN (SELECT UserName FROM radreplies where Attribute = 'Framed-Pool') AND Empresa = '$empresa_escolhida' ";
vlw pessoal! atravésdo codigo acima, utilzando not in deu certo
e somente retira da lista.
obrigado
Ta, e qual sua duvida, problema, necessiade,...?