Campecino 0 Denunciar post Postado Junho 21, 2009 Olá pessoal! Alguem sabe se da pra fazer 2 select em um while? Tipo assim, tenho duas tabelas: datas e dados Na primeiro select vou buscar o login que tenha o mes igual ao de hoje, e no segundo pego o nome do login que achou na busca anterior: Minhas tabelas: datas id - login - data "formato date : 0000-00-00" dados id - login - nome - endereco - etc código: $month = "06"; $dbnamegt="master"; mysql_select_db($dbnamegt) or die ("Erro"); $sql = "SELECT * FROM `datas` WHERE MONTH(data) = $month"; $query = mysql_query($sql) or die ("Erro"); if (mysql_num_rows($query) >= 1) { while($n =mysql_fetch_array($query)){ $login = $n['login']; $data = $n['data']; $sql = "SELECT * FROM `dados` WHERE `login` = '$login'"; $query = mysql_query($sql) or die ("Erro"); $o = mysql_fetch_array($query); $nome = $o['nome']; echo "$nome - $login - $data </ br>"; } } else{ echo "nada, ect"; } Gostaria que mostrasse assim: Nome - Login do cidadão - data Nome - Login do cidadão - data Nome - Login do cidadão - data Mas ele mostra a primeira linha e para, o while não funciona :( O que pode ser? Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
fetish 3 Denunciar post Postado Junho 21, 2009 Tenta fazer, assim: while ($n = mysql_fetch_array($query) || $j = ....) {} Compartilhar este post Link para o post Compartilhar em outros sites
Campecino 0 Denunciar post Postado Junho 21, 2009 Olá fetish, tentei fazer como você falou mas ta dando erro, o que pode ser? Erro Notice: Undefined offset: 2, Notice: Undefined offset: 1, Notice: Undefined offset: 2 e por ai vai, rs Código novo $month = "06"; $dbnamegt="master"; mysql_select_db($dbnamegt) or die ("Erro"); $sql = "SELECT * FROM `datas` WHERE MONTH(data) = $month"; $query = mysql_query($sql) or die ("Erro"); $sql2 = "SELECT * FROM `dados` WHERE `login` = '$login'"; $query2 = mysql_query($sql2) or die ("Erro"); if (mysql_num_rows($query) >= 1) { while($n =mysql_fetch_array($query) || $o =mysql_fetch_array($query2)){ $login = $n['login']; $data = $n['data']; $nome = $o['nome']; echo "$nome - $login - $data </ br>"; } } else{ echo "nada, ect"; } Obrigado! Compartilhar este post Link para o post Compartilhar em outros sites
fetish 3 Denunciar post Postado Junho 21, 2009 Bom tenta com &&, mais mesmo assim posta uma foto porquê ler assim erro não consigo resolver. Compartilhar este post Link para o post Compartilhar em outros sites
Campecino 0 Denunciar post Postado Junho 22, 2009 Olá fetish, coloquei o && mas ainda não funcionou, parece que o segundo mysql_fetch_array ta anulando o primeiro, bom a parte que ta dando erro, é as linhas 387 e 388: $datad = explode("-",$data); $diad = $datad[2]; $mesd = $datad[1]; // linha 387 $anod = $datad[0]; // linha 388 $datanb = "$diad/$mesd/$anod"; o primeiro query que pega os dados de $data. Código: $month = "06"; $dbnamegt="master"; mysql_select_db($dbnamegt) or die ("Erro"); $sql = "SELECT * FROM `datas` WHERE MONTH(data) = $month"; $query = mysql_query($sql) or die ("Erro"); $sql2 = "SELECT * FROM `dados` WHERE `login` = '$login'"; $query2 = mysql_query($sql2) or die ("Erro"); if (mysql_num_rows($query) >= 1) { while($n =mysql_fetch_array($query) && $o =mysql_fetch_array($query2)){ $login = $n['login']; $data = $n['data']; $nome = $o['nome']; echo "$nome - $login - $data </ br>"; } } else{ echo "nada, ect"; } Compartilhar este post Link para o post Compartilhar em outros sites
fetish 3 Denunciar post Postado Junho 22, 2009 Então tente fazer por operador ternario: while($n =mysql_fetch_array($query) ? $o = mysql_fetch_array($query2) : null) {} Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 22, 2009 Tipo assim, tenho duas tabelas: datas e dados Na primeiro select vou buscar o login que tenha o mes igual ao de hoje, e no segundo pego o nome do login que achou na busca anterior: Minhas tabelas: datas id - login - data "formato date : 0000-00-00" dados id - login - nome - endereco - etc Gostaria que mostrasse assim: Nome - Login do cidadão - data Nome - Login do cidadão - data Nome - Login do cidadão - data Mas ele mostra a primeira linha e para, o while não funciona :( O que pode ser? Obrigado! Por que não faz simplesmente um JOIN ?? $month = date('m'); $dbnamegt = 'master'; mysql_select_db($dbnamegt) or die ("Erro"); $sql = " SELECT * FROM `datas` INNER JOIN `dados` ON datas.login = dados.login WHERE MONTH(datas.data) = '{$month}' "; echo $sql, "\n", '<br />'; //diga oque retornou disso, depois remova. $query = mysql_query( $sql )or die( mysql_error() ); if( mysql_num_rows($query) > 0 ) { while( $n = mysql_fetch_array($query) ) { $login = $n['login']; $data = $n['data']; $nome = $n['nome']; echo $nome .'-'. $login .'-'. $data .'</ br>'; } } else echo "nada, ect"; Compartilhar este post Link para o post Compartilhar em outros sites
Campecino 0 Denunciar post Postado Junho 22, 2009 Muito obrigado ao Fetish e ao Willian, problema resolvido! Abraço! :D Compartilhar este post Link para o post Compartilhar em outros sites
William Bruno 1501 Denunciar post Postado Junho 22, 2009 Se puder falar 'como resolveu', seria legal, assim fica registrado para o próximo que tiver o mesmo problema, e pesquisar. Oque você tava querendo fazer, não ia dar certo mesmo, no mínimo você teria que fazer whiles encaixados... não um mesmo while com 2 condições daquele jeito. Compartilhar este post Link para o post Compartilhar em outros sites
Campecino 0 Denunciar post Postado Junho 22, 2009 Ah claro, Eu utilizei o código que você me passou, só precisei deixar os Collation iguais, pois o datas estava em latin1_general_ci e o dados em latin1_swedish_ci, agora ta tudo latin1_general_ci, E mudei a primeira linha: $month = date('m'); Para: $month = "$mesd"; Porque o mês que estou usando é o mês seguinte. Finalizando, talvez o código do Fetish esteja correto, mas eu não consegui adaptá-lo pra o que eu preciso, e o do Willian me caiu como uma luva, ou seja, obrigado aos dois. Segue o cód. final: $month = "$mesd"; $dbnamegt = 'master'; mysql_select_db($dbnamegt) or die ("Erro"); $sql = " SELECT * FROM `datas` INNER JOIN `dados` ON datas.login = dados.login WHERE MONTH(datas.data) = '{$month}' "; $query = mysql_query( $sql )or die( mysql_error() ); if( mysql_num_rows($query) > 0 ) { while( $n = mysql_fetch_array($query) ) { $login = $n['login']; $data = $n['data']; $nome = $n['nome']; echo $nome .'-'. $login .'-'. $data .'</ br>'; } } else echo "nada, ect"; Compartilhar este post Link para o post Compartilhar em outros sites