Ir para conteúdo

POWERED BY:

Arquivado

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

suelystonn

Como selecionar próximo registro MySQL

Recommended Posts

Olá pessoal,

 

É o seguinte, eu preciso selecionar o próximo registro de uma tabela e quando chegar ao último preciso que volte para o inicio, para resolver o problema estou usando:

$id_b = $_POST['id_b'];
if(isset($id_b)):
	$SQL_Q = mysql_query("SELECT * FROM `ativo` WHERE `id_b`='".$id_b."'") or die(mysql_error());
	if(mysql_num_rows($SQL_Q)):
	
	while($a=mysql_fetch_array($SQL_Q)) {
	
	$mdsrc = $a["mdsrc"];

}		//exibe as infos do usuário
	else:

echo "O site atual, não existente: $id_b. Informe o número do site ao administrador!";
	endif;
endif;

$atual=$id_b;
$proximo = $atual+1 ;

$query = "SELECT * FROM ativo";
mysql_query ($query) or die ("Ocorreu um erro ao contar o total de sites! Informe isto ao administrador!");
$total = mysql_affected_rows();

if ($proximo>$total):

$proximo = 1;
else:
$proximo = $atual+1 ;
endif;

Mais acontece que em meu sistema, pode ocorrer de algum registro ser excluído, então ai é que vem o problema, pois o código que estou usando pega o registro atual e soma +1, no caso de um registro ser excluído, não dá pra pegar o próximo, quer dizer, até dá, mas ele fica pegando os burado até chegar no próximo e eu preciso que ele não selecione o burado, apenas o proximo.

 

Exemplo:

id_b = 1;

id_b = 4

id_b = 6

id_b = 7

id_b = 10

 

e assim por diante... como posso revolser isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, agora acho que entendi.

 

Vou tentar fazer aqui e ver no que dá, daqui a pouco digo o resultado.


Tentei fazer dessa forma, alterei somente esta parte do código que é a que importa

if(isset($id_b)):
	$SQL_Q = mysql_query("SELECT * FROM `ativo` WHERE `id_b`='".$id_b."'") or die(mysql_error());
	$totalid_b = mysql_affected_rows();
	if($totalid_b == 0 OR empty($totalid_b)):
	$id_b = $id_b + 1;
	else:
	endif;
	if(mysql_num_rows($SQL_Q)):
	
	while($a=mysql_fetch_array($SQL_Q)) {
	
	$mdsrc = $a["mdsrc"];

}		//exibe as infos do usuário
	else:

echo "O site atual, não existente: $id_b. Informe o número do site ao administrador!";
	endif;
endif;

Criei a variável $totalid_b que conta o total de registro da consulta ai depois fiz um uma condição com if para que se o $totalid_b retornasse 0 ou sem nada, o $id_b somasse mais +1, porem não deu certo, oque acontece é que após eu fazer essa alteração o retorno vem somando +2, ou seja, fica somando de 2 em 2.

 

E agora o que eu posso fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haveno,

 

Pensei, pensei e pensei e descobri que fazer isso não tem lógica.

 

Porque ela somente está somando +1 ao valor que não existe no banco de dados.

 

Exemplo: supomos que na minha tabela eu tenha o seguinte:

id_b = 2

id_b =10

id_b = 14

 

Então supomos agora que eu tenha parado no id 3, que não existe na tabela, oque vai acontecer é q apenas ele vai pegar o id 3 e vai somar +1, resultando 4. Ou seja, não chegara ao próximo registro que é o 10.

 

E agora ? to precisando mesmo fazer isso mais não encontro solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente isso amigo, ele vai ficar selecionando o 4, o 5 e o 6 até chegar no 10, e o que eu quero é que ele não selecione esses registros porque eles não existe no banco de dados, somente os que existe.

 

como no exemplo que eu tinha dado, ele teria que pular do 3 para o 10 e do 10 para 0 14 que são os que existe no banco de dados.

 

E é isso que eu estou procurando.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Kra, ai que está, vc tem que criar uma condição para verificar se existe esses registro, caso não exista ele pula, não seleciona..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Haveno, Se não for pedir de mais, como eu criaria essa condição para verificar se ele existe?

 

Como assim mau rs?

 

É que eu ainda nn sei muita, ainda estou aprendendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

+/- daquela maneira que já havia lhe dito:

 

if($totalid_b == 0 OR empty($totalid_b)):
// nao faz nada
else:

// faz oque você quer
endif;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi mal pessoal pela demora pra responder, mais é que aqui tava sem net <_<

 

Haveno, isso ai só verifica se existe um registro, não seleciona o próximo.

 

Queria agradecer mesmo de coração ao Haveno, que tentou me ajudar de todas as formas, mas infelizmente não encontrei um solução para o problema, a única saída que tenho é fazer uma nova remodelagem, uma estrutura de dados melhor.

 

Muito obrigado mesmo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal,

 

Depois de todo esse tempo encontrei a solução que eu precisava, era exatamente isso que eu precisava:

SELECT * FROM ativo WHERE id_b = 15 OR id_b = (SELECT MIN(id_b) FROM ativo WHERE id_b > 15)

Onde 15 é o id atual.

 

Ta ai pra quem precisar!!! :thumbsup: :D

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.