Ir para conteúdo

POWERED BY:

Arquivado

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

cristian_web

[Resolvido] Logica Mysql

Recommended Posts

Pessoal o problema é o seguinte:

 

vamos supor que tenha uma tabela chamada registros com a seguinte estrutura

 

ID - int(5)
Nome - varchar(200)
status - varchar (1)

 

 

Os primeiros registros são esses:

1

Jose

S

 

2

Maria

S

 

3

João

N

 

4

S

 

 

 

Lá vai a duvida

 

eu gostaria de dar um Select em TODOS os registros ONDE o status=S a partir do 1º Registro e Fechando o loop onde o Status é Não.

 

 

Ou seja

 

Gostaria que no exemplo anterior retornasse somente José e Maria pois os 2 têm o status = "S" e depois deles vem João que o Status="N" (ou seja não entraria na consulta.)

 

 

Espero ter sido claro! desde já agradeço!

Compartilhar este post


Link para o post
Compartilhar em outros sites
SELECT * FROM tabela WHERE status = 'S'

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM tabela WHERE status = 'S'

 

Acho que não me entendeu...

Desta forma eu pegaria todos os registros onde o status = 'S' só que eu gostaria de pegar só os primeiros registros até encontrar um registro que tenha N.

 

No exemplo que eu tinha dado pode ver que há 3 registros que possuem Status = "S" só que eu gostaria que retornasse apenas os 2 primeiros pois o 3º Registro é "N".

Compartilhar este post


Link para o post
Compartilhar em outros sites

e se usar limit?

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM tabela WHERE status = 'S' LIMIT 10

so exibe os 10 primeiros registros

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT * FROM tabela WHERE status = 'S' LIMIT 10

so exibe os 10 primeiros registros

 

Cara, não é bem assim... Eu não sei a quantidade de registros que a consulta vai exibir... eu gostaria que fosse automatico. Vou colocar um exemplo pra ver se me entende.

 

 

Digamos que eu tenha um sisteminha de e-mail com os campos (ID,MSG,CHECK)

 

e os registros:

 

1

'Olá'

0

 

2

'OI'

0

 

3

'Como vai?'

1

 

4

'Tudo Bem'

0

 

 

 

Nesse caso eu só gostaria de listar os 2 primeiros registros pois o campo "CHECK" é igual a 0, já no terceiro o campo check=1

 

em outro caso

 

 

1

'Olá'

0

 

2

'OI'

1

 

3

'Como vai?'

0

 

4

'Tudo Bem'

0

 

 

Só iria mostrar o primeiro, pois ele é o unico no qual o campo check é 0 antes do primeiro que o campo é 1 (No caso ID:2).

Compartilhar este post


Link para o post
Compartilhar em outros sites

e pelo php fazendo um if?

Compartilhar este post


Link para o post
Compartilhar em outros sites
http://php.net/manua...uctures.for.php

veja os exemplos, algum pode te ajudar

 

 

 

e pelo php fazendo um if?

 

 

Digamos que eu já pensei nas duas formas... só que há um porém:

 

A tabela é muito grande, cerca de 800.000 Registros, e está em constante movimentação... Seria viavel jogar um array com 800mil registros, fazer um loop nesse array com 800 mil IF's ?

 

Gostaria de saber se há alguma função MySql que tenha a seguinte função:

 

"Select * FROM tabela where check='0' LIMIT 0, até onde check != 0"

Compartilhar este post


Link para o post
Compartilhar em outros sites

nao ha um select para esse fim

você pode fazer uma consulta com limit assim:

 

SELECT * FROM tabela WHERE LIMIT 1000

se todos status forem 's', você faz outro select, ate chegar no status 'n'

 

 

qual a finalidade do que você quer?

pode haver outra solução

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim:

select * from registros where status = 'S' and id < (select min(id) from registros where status='N');

Compartilhar este post


Link para o post
Compartilhar em outros sites

Com a DIca do Fernando C já funcionou... Mas vlww!

 

select * from registros where status = 'S' and id < (select min(id) from registros where status='N');

disse pra testar justamente essa dica

pq eu rodei aqui com todos status = 'S' e não retornou nada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai faz um seguinte:

 

dentro do loop cria um while($erro == 0){ esse while vai mostrar os resultados}; ai voce um um comando para testa o status, se o status = N $erro = 1;

$busca = mysql_query("SElECT* FROM tabela");
$erro = 0
while($erro){
$res = mysql_fetch_array($busca);
$res = $res[2];
switch($res)
{
case 'S':BREAK;
case 'N': $erro = 1;BREAK;
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara VLWWW Deu certo!!!

q bom..sucesso ahe.. :thumbsup:

select * from registros where status = 'S' and id < (select min(id) from registros where status='N');

rodei aqui com todos status = 'S' e não retornou nada

1 esclarecimento: se todos os status forem 'S' não irá retornar nada mesmo..

pq nesse caso a subconsulta (a 1ª, que está entre parênteses):

select min(id) from registros where status='N'

não irá retornar nada à 2ª consulta (externa), ok?

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.