Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
Zé
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!
>
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".
e se usar limit?
Qual seria a maneira correta de usar um LIMIT fazendo apenas uma consulta na tabela?
SELECT * FROM tabela WHERE status = 'S' LIMIT 10
so exibe os 10 primeiros registros
>
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).
http://php.net/manual/en/control-structures.for.php
veja os exemplos, algum pode te ajudar
e pelo php fazendo um if?
>
http://php.net/manua...uctures.for.phpveja 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"
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
tente assim:
select * from registros where status = 'S' and id < (select min(id) from registros where status='N');>
tente assim:
select * from registros where status = 'S' and id < (select min(id) from registros where status='N');
Cara VLWWW Deu certo!!!Eu acho que da para fazer usando ORDER BY...
Por exemplo:
SELECT * FROM tabela ORDER BY desc/asc status
teste com todos status = 'S'
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');>
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
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;
}
}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?
SELECT * FROM tabela WHERE status = 'S'