Ir para conteúdo

POWERED BY:

Arquivado

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

Campecino

[Resolvido] while com 2 select

Recommended Posts

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

Tenta fazer, assim:

 

while ($n = mysql_fetch_array($query) || $j = ....) {}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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.

 

Imagem Postada

 

 

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.