Ir ao conteúdo
  • Cadastre-se

Consultar registros mysql


Ir à solução Resolvido por Arley Fellipe,

Posts recomendados

Olá pessoal tenho uma rede social que está em desenvolvimento e está faltando alguns detalhes, como em consultas de registros.

 

Vou explicar o problema tenho uma tabela 'conta' que está todas as informações id, user, email, senha e etc outra tabela chamada 'amigos' que tem o id, user, amigo, total e outra chamada 'online' para ver os usuários online contendo code_id, id_on, total. 

 

a página index faz a consulta com a clausula INNER JOIN com as tabelas 'conta' e 'amigo' aqui o code:

<?php	$sql_request_amigos = "SELECT `amigos`.*, `conta`.*FROM amigos INNER JOIN contaON `amigos`.amigo = `conta`.idWHERE `amigos`.usuario LIKE '49'";	$query_amigos = mysql_query($sql_request_amigos);	 while($resultado_amigos = mysql_fetch_assoc($query_amigos)){	$id_amigo = $resultado_amigos['amigo'];	$sql = "SELECT COUNT(*) AS total FROM `online` WHERE `total` = 0 AND `id_on` LIKE '".$id_amigo."'";$result = mysql_query($sql) or die (mysql_error());$total = mysql_result($result, 0, 'total');	echo $total;}?>

depois da consulta de duas tabelas eu pego a identificação dos amigos aqui nesta linha $id_amigo = $resultado_amigos['amigo']; depois faço outra consulta dentro da while que irá consultar os amigos que está online só que a variável $id_amigo está assim '2059689566' cada amigo tem seu número seria assim '20' and '56' and '68'...

quero pegar a identificação de cada amigo separadamente e fazer a consulta para que a linha $sql = "SELECT COUNT(*) AS total FROM `online` WHERE `total` = 0 AND `id_on` LIKE '".$id_amigo."'"; funcione corretamente porque no momento está pegando  '2059689566' e contando este registro que não existe. Após isto a variável $total mostra o número de amigos onlline alguém pode resolver este problema? 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Olá,

 

tenta fazer desta forma:

<?php	$sql_request_amigos = mysql_query("SELECT `amigos`.*,                                            `conta`.*                                   FROM amigos                                    INNER JOIN conta ON `amigos`.amigo = `conta`.id                                   WHERE `amigos`.usuario = 49");		 while($amigos = mysql_fetch_object($sql_request_amigos)):	$id_amigo = $amigos->amigo;	$sql = mysql_query("SELECT COUNT(*) AS total         FROM `online`         WHERE `total` = 0 AND `id_on` = $id_amigo");if($sql):  $total = mysql_result($sql, 0, 'total');else:   echo "Algo deu errado..". mysql_error();endif;	echo $total;endwhile;?>

Tenta não utilizar o LIKE para numeros inteiros. .. ele é mais usado para strings.  para buscar o id,  use o sinal de igual... 

 

Teste aí...  seria interessante você postar a estrutura de todas as tabelas que você esta usando no sql... para ficar mais claro...

Link para o comentário
Compartilhar em outros sites

Ontem mesmo tentei usar funções mas, deu outro problema e testei agora o código que você mandou e continua o mesmo problema aparece assim o número de registro 1 1 ou seja tem dois amigos onlline agora para os usuários o echo deveria ser assim 2 amigos onlline como fazer este número 1 1 somar entre si eu tentei usar number_format, array e array_sum e a string ficou assim 1 + 0,1 e ficou 1,1 vou mostrar no código:

ONTEM TENTEI COM FUNÇÕES DA UMA OLHADA:<?phptry{$pdo = new PDO("mysql:host=localhost;dbname=dados", "Arley Fellipe", "12345");} catch (PDOException $e) {echo $e->getMessage();}try {$sql01 = $pdo->prepare("SELECT amigos.*, conta.*FROM amigos INNER JOIN contaON amigos.amigo = conta.idWHERE amigos.usuario LIKE '49'");$sql01->execute();} catch (PDOException $e4) {echo $e4->getMessage();}while($amigos = $sql01->fetch(PDO::FETCH_OBJ)){$sql = "SELECT * FROM online WHERE (`id_on` LIKE '".$amigos->amigo."')";$result = mysql_query($sql);$total = @mysql_num_rows($result);$v1 = number_format($total, 2,',','.');	// FORMATA ASSIM 1,001,00$a = array($v1,','); // PEGA OS NÚMEROS 1 E 1echo array_sum($a); // SOMA 1 + 1 MAS, O RESULTADO ME PARECE ASSIM 1 + 0,1 = 1,1 OU 1 1}?>AQUI EU TENTEI COM SEU CÓDIGO:<?php$sql_request_amigos = mysql_query("SELECT `amigos`.*,                                            `conta`.*                                   FROM amigos                                    INNER JOIN conta ON `amigos`.amigo = `conta`.id                                   WHERE `amigos`.usuario = 49");		 while($amigos = mysql_fetch_object($sql_request_amigos)):	$id_amigo = $amigos->amigo;	$sql = mysql_query("SELECT COUNT(*) AS total         FROM `online`         WHERE `total` = 0 AND `id_on` = $id_amigo");if($sql):  $total = mysql_result($sql, 0, 'total');  else:echo "Algo deu errado..". mysql_error();endif;	echo $total; //AQUI APARECE ASSIM 1 1 OU 1,1 OU SEJA MOSTRA O NÚMERO DE REGISTRO DO AMIGO 1 E DO OUTRO MAS EU QUERO QUE SOME TUDO E MOSTRE ASSIM 2 AMIGOS ONLINEendwhile;?>
Link para o comentário
Compartilhar em outros sites

  • Moderador

Seguindo o exemplo que eu passei.. tente colocar a função  de contagem:  $userOnline count($total);

<?php$sql_request_amigos = mysql_query("SELECT `amigos`.*,                                            `conta`.*                                   FROM amigos                                    INNER JOIN conta ON `amigos`.amigo = `conta`.id                                   WHERE `amigos`.usuario = 49");		 while($amigos = mysql_fetch_object($sql_request_amigos)):	$id_amigo = $amigos->amigo;	$sql = mysql_query("SELECT COUNT(*) AS total         FROM `online`         WHERE `total` = 0 AND `id_on` = $id_amigo");if($sql):  $total = mysql_result($sql, 0, 'total');  $userOnline = count($total);   else:echo "Algo deu errado..". mysql_error();endif;	//echo $total; //AQUI APARECE ASSIM 1 1 OU 1,1 OU SEJA MOSTRA O NÚMERO DE REGISTRO DO AMIGO 1 E DO OUTRO MAS EU QUERO QUE SOME TUDO E MOSTRE ASSIM 2 AMIGOS ONLINEecho $userOnline;endwhile;?>
Link para o comentário
Compartilhar em outros sites

Testei o código e o erro continua é o seguinte pelo que eu entendi após a primeira consulta dos amigos na while fica assim exemplo se o usuário tem 3 amigos quando eles estão online fica assim 111 na consulta dos três amigos, e se apenas 2 amigos estão online assim 110, para mostrar os usuários tem que ser assim: se tiver 3 online: 1+1+1= 3 amigos online se tiver 2 online: 1+1+0 = 2 amigos online na linha 17 está pegando o número de linhas ou seja mysql_num_rows se tiver 3 onlline fica assim 111 e a função count conta os caracteres 111 = 3 mas, este código está na while e o resultado de count sempre será 111 se 2 estiverem onlline 110 = count = 111 se eu tirar o echo $userOnline e colocar depois da while o count irá contar assim 0 = count = 1 fora da while ele perde o número de linhas mas, se estiver dentro da while ele mantem esta sequencia chata 111 não sei nenhuma outra maneira de fazer uma consulta sql e saber se o amigo está onlline:

 

 

 

<?php$sql_request_amigos = mysql_query("SELECT `amigos`.*,                                            `conta`.*                                   FROM amigos                                    INNER JOIN conta ON `amigos`.amigo = `conta`.id                                   WHERE `amigos`.usuario = 49");		 while($amigos = mysql_fetch_object($sql_request_amigos)):	$id_amigo = $amigos->amigo;	$sql = mysql_query("SELECT COUNT(*) AS total         FROM `online`         WHERE `total` = 0 AND `id_on` = $id_amigo"); if($sql):   $total = mysql_result($sql, 0, 'total'); //AQUI ESTÁ ASSIM 110  $userOnline = count($total); //AQUI CONTA O NÚMERO DE CARACTERES MAS, CONTOU O ZERO E AINDA FICOU ASSIM 111  else: echo "Algo deu errado..". mysql_error(); endif;	echo $userOnline; //AQUI MOSTRA ASSIM 111  endwhile;//SE EU COLOCAR FORA DA WHILE ELE PERDA AS INFORMAÇÕES DE QUANTAS LINHAS FOI ENCONTRADA E FICARIA ASSIM echo $userOnline; //1 QUE NA VERDADE SERIA 3 ONLINE ?>

Então o que fazer com esta sequencia 111 são 3 amigos online e agora para somar está sequencia sem perder as informações, não conheço outra forma e agora?  

Link para o comentário
Compartilhar em outros sites

  • Moderador

Vamos fazer assim,   vamos por partes.

 

por gentileza poderias postas um print da estrutura do seu banco?  podes entrar no modo designer do phpmyadmin   e tirar o print do banco e os relacionamentos...

 

acredito que o erro pode ser a consulta de forma errônea... ou na lógica do php.. 

Link para o comentário
Compartilhar em outros sites

OK, meu banco de dados está em um localhost porque falta apenas este detalhe na consulta de registros, eu vou colocar a print da estrutura do banco de dados mostrando o número de tabelas, a collation e o tipo de dados de armazenamento,também a tabela amigos, tabela conta e a tabela online, não vejo nada de errado no database mas, vou mostrar as estruturas detalhe alguns dados foram ocultados para não revelar o nome do domínio e a ideia da rede social.

 

 

DATABASE

 

post-701454-0-78728700-1391609652_thumb.

 

 

TABLE CONTA

 

post-701454-0-74130100-1391609664_thumb.

 

TABLE AMIGOS

 

post-701454-0-26818200-1391609672_thumb.

 

TABLE ONLINE

 

post-701454-0-09120000-1391609681_thumb.

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

Bem.. não era isso que eu tinha pedido, sugeri o print dos relacionamentos mostrado no modo designer. para facilitar o raciocínio da consulta.

 

Pelo que eu vi ali você usa muito tinyint ... evite de usar isso para IDs.

outra coisa que eu vi... você tem um campo "total" desnecessário... se você esta querendo contar, ele não é necessário.

 

na tabela online,  você tem o tipo varchar no id_on e usuário...  está errado.

 

seu banco apresenta inconsistências. precisa usar pelo menos a 1NF e 2NF

Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...
  • Solução

Resolvi o problema o problema é que eu estava fazendo um consulta sql sem sentido ou seja sempre irá aparecer 11 ou 1,1 no caso seria 2 amigos online isso acontece porque está na while e por isso o problema persistia resolvi tentar sem wilhe e o problema era outro mostrava apenas um número 1 então tentei de outra forma fiz uma consulta sql que consulta 2 tabelas com where da id do usuário que está logado dessa forma a consulta sql ficará mas coerente e a linguagem mysql entenderá o código e mostrarar o que realmente o usuário quer ver!

<?php$sql = mysql_query("SELECT `amigos`.*, `online`.*FROM amigos INNER JOIN onlineON `amigos`.amigo = `online`.id_on WHERE `amigos`.usuario = '".$_SESSION['UsuarioID']."'");  //Consultar a tabela amigos e online com where em tabela amigos com id da pessoa logada! //Nste caso se somente se o amigo que está online é amigo do usuário logado.			echo '<font color="#FF0000">'.$on = mysql_num_rows($sql).'</font>';//Aqui mostra o número de amigos online do usuário desta sesâo $_SESSION['UsuarioID'] e se for zero mostra 0 e se quiser não mostrar o zero "0" faça assim:	//if(mysql_num_rows($sql) >= 1){				//echo '<font color="#FF0000">'.$on = mysql_num_rows($sql).'</font>';		//}?>
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...