Bru_ce 53 Denunciar post Postado Junho 24, 2013 Boa Tarde Amigos, Estou com uma dúvida, creio que seja coisa fácil de resolver. Estou querendo gerar um combobox com algumas restrições: Tenho um tabela assim +/- Logo preciso gerar um combobox que faça uma consulta na tabela e verifique linha por linha, Por exemplo, a amostra do sistema de SP é 2, se duas pessoas tiverem com status 2 ele não deverá mostrar no combobox, ai no caso de RJ a amostra é 15, porém apenas uma pessoa esta com status 2, logo ele deverá aparecer no combobox. Meu Script se encontra assim: <option value="" selected="selected">Selecione</option> <?php $consulta = mysql_query("SELECT * FROM tabela WHERE status=0 GROUP BY uf ORDER BY uf"); while($estado = mysql_fetch_array($consulta)){ ?> <option value="<?php echo $estado['UF']; ?>"><?php echo $estado['UF']; ?></option> <?php }?> </select> Compartilhar este post Link para o post Compartilhar em outros sites
Bacsh 4 Denunciar post Postado Junho 24, 2013 Select dentro de select: select * from sua_tabela where sei_la(select * from outra_ou_a_mesma_tabela) Ou use o Join: http://vivenciandoti.blogspot.com.br/2009/05/sql-uso-do-join-em-clausulas-select.html Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 24, 2013 Amigo, Seria +/- isso ó: SELECT COUNT(status) FROM tabela WHERE status=2 GROUP BY uf Agora preciso fazer outra consulta dentro e passar o valor do status, assim +/- SELECT * FROM tabela WHERE qtdStatus<>amostra Compartilhar este post Link para o post Compartilhar em outros sites
Guilherme Nunes Gonçalves 2 Denunciar post Postado Junho 24, 2013 Essa sua tabela tem algum ID? Poderia ficar mais ou menos assim: SELECT COUNT(status) FROM tabela WHERE status=2 AND idTabela IN (SELECT idTabela FROM tabela WHERE qtdStatus<>amostra) GROUP BY uf Compartilhar este post Link para o post Compartilhar em outros sites
Bacsh 4 Denunciar post Postado Junho 24, 2013 Amigo, Seria +/- isso ó: SELECT COUNT(status) FROM tabela WHERE status=2 GROUP BY uf Agora preciso fazer outra consulta dentro e passar o valor do status, assim +/- SELECT * FROM tabela WHERE qtdStatus<>amostra Hmm ok, eu acho que entendi, tenta fazer isso: select COUNT(status) from tabela where status=2 AND uf = "sp" Dae basta fazer um if, se retornar mais de um 1 com status 2 não mostra, se não mostra. Se quiser automatizar a busca dos estados basta jogar a consulta dentro de um while e fazer uma pesquisa dos estados antes e em vez de "sp" coloca a variável. Se não é isso que você quer explica melhor, porque sinceramente, está difícil de entender... Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 24, 2013 Guilherme, tentei fazer o que você sugeriu porém não funcionou .. Bacsh, seria o seguinte cara: Preciso fazer uma consulta para contar quantas pessoas de SP por exemplo acessaram o sistema, pensa que são 15 pessoas de SP, e apenas 2 acessaram, então deve aparecer no meu combobox as pessoas de SP, caso as 15 tenham acessado a pesquisa elas não deveram aparecer .. e assim por diante com os outros estados .. Compartilhar este post Link para o post Compartilhar em outros sites
Bacsh 4 Denunciar post Postado Junho 25, 2013 Bacsh, seria o seguinte cara: Preciso fazer uma consulta para contar quantas pessoas de SP por exemplo acessaram o sistema, pensa que são 15 pessoas de SP, e apenas 2 acessaram, então deve aparecer no meu combobox as pessoas de SP, caso as 15 tenham acessado a pesquisa elas não deveram aparecer .. e assim por diante com os outros estados .. Para consultar quantas pessoas de SP acessaram o sistema: SELECT COUNT(nome) FROM tabela WHERE status=2 AND uf="SP" Para aparecer essas pessoas no combobox basta retirar o count e fazer o while assim como você já tinha feito. Para verificar em todos os estados basta você remover isso aqui: AND uf="SP". Assim você vai pesquisar em todos os estados, cara é muito simples, não sei qual é sua dificuldade... Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 25, 2013 Amigo, tem que fazer um count geral entende, dentro do while .. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Junho 25, 2013 Fazer aparecer só quem tem status 0 não resolve??? Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 25, 2013 Não amigo, pois as vezes a amostra dos clientes de GO é 30, porém no banco tem 50 de GO.Logo se 30 entraram no sistema, tem que sair do combobox o GO. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Junho 25, 2013 Deixa eu ver se entendi, no Combo você não quer os estados cuja amostra seja igual à quantidade de usuários daquele estado? em programação, você tem que ter [inline]$amostra[/inline] linhas contendo o [inline]$status = 2[/inline] ?? Se eu entendi direito, é isso aqui: mysql> select nome, uf from temp where amostra > (select count(t.status) from temp as t where t.uf = uf and t.status = 2 group by t.status limit 1); +---------+------+ | nome | uf | +---------+------+ | rafael | rj | | jonatas | rj | +---------+------+ 2 rows in set (0,00 sec) mysql> select * from temp; +---------+------+--------+---------+ | nome | uf | status | amostra | +---------+------+--------+---------+ | bruno | sp | 0 | 2 | | maria | sp | 2 | 2 | | josé | sp | 2 | 2 | | rafael | rj | 0 | 15 | | jonatas | rj | 2 | 15 | +---------+------+--------+---------+ 5 rows in set (0,00 sec) Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 25, 2013 Vou explicar de novo hahahha, Pensa assim amigo, tenho um banco de dados com vários estados.Cada estado pode ter N usuários, vamos supor que são paulo tenha 30 usuários, porém a amostra de SP é 15 por exemplo.Ou seja no meu combobox não poderá aparecer SP caso 15 usuários de SP ja tenham acessado o sistema. Para eu saber que o usuário acessou o sistema eu fiz uma query que quando ele loga é colocado 2 na coluna status. Agora vamos supor outro UF, de GO por exemplo, lá tem uns 22 usuários e a amostra é 12, ou seja ..Caso esses 12 tenham acessado o sistema, não poderá aparecer no combobox também, e assim por diante. Conforme imagem abaixo a opção GO deverá sumir .. Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Junho 25, 2013 Testou a consulta? Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 27, 2013 O que seria temp, t.status e t na consulta que você me passou ? mysql> select nome, uf from temp where amostra > (select count(t.status) from temp as t where t.uf = uf and t.status = 2 group by t.status limit 1); Compartilhar este post Link para o post Compartilhar em outros sites
Evandro Oliveira 331 Denunciar post Postado Junho 27, 2013 O que seria temp, t.status e t na consulta que você me passou ? temp é uma tabela temporária contendo exatamente os resultados que você trouxe no primeiro post... select * from temp; +---------+------+--------+---------+ | nome | uf | status | amostra | +---------+------+--------+---------+ | bruno | sp | 0 | 2 | | maria | sp | 2 | 2 | | josé | sp | 2 | 2 | | rafael | rj | 0 | 15 | | jonatas | rj | 2 | 15 | +---------+------+--------+---------+ 5 rows in set (0,00 sec) [inline]t[/inline] é um alias (apelido) para [inline]temp[/inline] da subconsulta se diferenciar da [inline]temp[/inline] da consulta principal. [inline]t.status[/inline] é o campo [inline]status[/inline] da tabela [inline]temp[/inline] que está referenciada sob o apelido [inline]t[/inline]. Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 27, 2013 Correto, deixei assim e não funcionou.Não aparece nenhum UF agora .. $consulta = mysql_query("select * from tabela where amostra > (select count(t.statusPesquisa) from tabela as t where t.uf = uf and t.statusPesquisa = 2 group by t.statusPesquisa limit 1)"); Tentei assim e agora ele mostra os estados, porém deveria sair SP, pois SP a quantidade de amostras foi concluída. $consulta = mysql_query("select * from tabela where amostra <= (select count(t.statusPesquisa) from tabela as t where t.uf = uf and t.statusPesquisa = 2) group by uf order by uf"); Compartilhar este post Link para o post Compartilhar em outros sites
Bacsh 4 Denunciar post Postado Junho 27, 2013 Porque você não faz um passo-a-passo? Exemplo: Consulta todos os estados usando o DISTINCT e já pega o valor do amostra de cada um, depois faz um while com esse resultado para pesquisar cada estado o número de usuários. Então faz um if com uma pesquisa de count para verificar se o número é menor ou maior que a amostra. Colocando em prática: $sql = "SELECT DISTINCT(uf) AS uf FROM tabela ORDER BY uf DESC"; // aqui em cima pesquisa todos os estados e suas amostras $bd->query($sql); $registro = 0; while ($registro<$bd->numeroDeRegistros()){ //aqui em cima percorre cada estado $varQualquer = $bd->leRegistro(); $amostra = $varQualquer ["amostra"]; //aqui em cima pega o valor da amostra de cada estado $uf = $varQualquer ["uf"]; //aqui em cima pega o estado separamente $sql2 = "SELECT COUNT(nome) FROM tabela WHERE status=2 AND uf='$uf'"; //aqui em cima conta quantos usuários com o status 2 tem no estado que o while está percorrendo $count = mysql_fetch_array($sql2 ) if ($amostra > $count){ //aqui em cima ele verifica se a amostra do estado é menor que a quantidade de usuários com o status 2 echo "$uf"; //aqui em cima ele imprimi estado para aparecer no seu combobox } else{ } $registro++; } Cara deve ter alguns erros aew no meio, mas da para entender :) Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 27, 2013 O que precisava exatamente era contar quantas pessoas existem com status 2 de cada UF que se encontra na coluna statusPesquisa, Depois de pegar a quantidade de amostra cada UF, depois verificar se o número de efetivos é menor que o número da amostra, caso for ele entra dentro do combobox, caso contrário não. Por exemplo estado SP Efetivos: 19 Amostra: 20 OK, entra no combobox pois a amostra não foi batida ainda ------------------------------------------------------------------ Por exemplo estado RJ Efetivos: 22 Amostra: 22 Não entra, pois a amostra foi batida. --------------------------------------------------- Por exemplo estado PA Efetivos: 17 Amostra: 16 Não entra, pois a amostra foi batida Compartilhar este post Link para o post Compartilhar em outros sites
Bacsh 4 Denunciar post Postado Junho 27, 2013 O que precisava exatamente era contar quantas pessoas existem com status 2 de cada UF que se encontra na coluna statusPesquisa, Depois de pegar a quantidade de amostra cada UF, depois verificar se o número de efetivos é menor que o número da amostra, caso for ele entra dentro do combobox, caso contrário não. Por exemplo estado SP Efetivos: 19 Amostra: 20 OK, entra no combobox pois a amostra não foi batida ainda ------------------------------------------------------------------ Por exemplo estado RJ Efetivos: 22 Amostra: 22 Não entra, pois a amostra foi batida. --------------------------------------------------- Por exemplo estado PA Efetivos: 17 Amostra: 16 Não entra, pois a amostra foi batida Ta cara no exemplo que eu dei ali faz isso, só que ele pesquisa de cada estado antes, a ordem dos fatores não altera o resultado, uma coisa que não entendi no que você falou é ali: SP Efetivos: 30 Amostra: 20 OK, entra no combobox pois a amostra não foi batida ainda PA Efetivos: 17 Amostra: 16 Não entra, pois a amostra foi batida Como assim cara, em São Paulo o número de amostras é menor que os efetivos e você diz que bateu (seja lá o que isso significa) e depois em PA o número de amostras também é menor e não bateu? Como assim, cara sua lógica está completamente confusa, se você não sabe nem o que quer, vai ser difícil da gente te ajudar, porque você não está conseguindo se expressar. PS: Vou colocar uns comentários no meu código para ver se lhe ajuda... Compartilhar este post Link para o post Compartilhar em outros sites
Bru_ce 53 Denunciar post Postado Junho 27, 2013 Pensa assim comigo amigo: Vou dar um exemplo similar: Pensa em uma balada, Podem entrar pessoas de estados nela: tem na fila 30 pessoas de SP, porém a casa suporta apenas 20 de SP.Quando entrarem 20 de SP o segurança irá barrar o restante; Para o estado não aparecer mais no combobox o número de efetivos tem que ser superior ou igual à amostra entende .. E para o estado aparecer no combobox o número de efetivos tem que ser inferior à amostra. Compartilhar este post Link para o post Compartilhar em outros sites