← Desenvolvimento

Dúvida - SQL_CALC_FOUND_ROWS

Lida 2926 vezes

Offline

Cacofb 
Elite
Mensagens 1036 Gostos 3
Troféus totais: 34
Trófeus: (Ver todos)
Level 6 Tenth year Anniversary Linux User Mobile User Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter

Boas Pessoal!

Alguém sabe, como faço para obter o total de registos existentes dentro da WHERE apenas numa querie?

SELECT SQL_CALC_FOUND_ROWS *
FROM alunos
WHERE estado = 'Activo';  # Rows: 34
SELECT FOUND_ROWS( ) AS contagem, nome
FROM alunos
WHERE estado = 'Activo'
LIMIT 0 , 10

O meu SQL retorna os 10 registos com os nome dos alunos mas na contagem está a zero.


Se fizer só isto:

SELECT SQL_CALC_FOUND_ROWS *
FROM alunos
WHERE estado = 'Activo';# Rows: 34
SELECT FOUND_ROWS( ) AS contagem
LIMIT 0 , 10

Retorna-me a contagem, 34 mas não tenho forma de obter os registos da tabela aluno.

Alguém sabe como resolver esta questão?

Obrigado
 :+trafego:
Offline

Bruno Mota 
Membro
Mensagens 1733 Gostos 3
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

usa a função mysql_num_rows
$numero = mysql_num_rows($sql);
Offline

Cacofb 
Elite
Mensagens 1036 Gostos 3
Troféus totais: 34
Trófeus: (Ver todos)
Level 6 Tenth year Anniversary Linux User Mobile User Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter

Não sei que tipo de retorno tenho para $select
Fiz echo e só aparece "total encontrado: "

Código: [Seleccione]
<?php

$select
=mysql_query("SELECT SQL_CALC_FOUND_ROWS *
FROM alunos
WHERE estado = 'Activo';
SELECT FOUND_ROWS() AS contagem, nome
FROM alunos
WHERE estado='Activo'
LIMIT 0,10"
);

echo 
"total encontrado: ".mysql_num_rows($select);

?>

Offline

Bruno Mota 
Membro
Mensagens 1733 Gostos 3
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

faz isto
Código: (php) [Seleccione]
<?php

$select
=mysql_query("SELECT  *
FROM alunos
WHERE estado = 'Activo';
SELECT FOUND_ROWS() AS contagem, nome
FROM alunos
WHERE estado='Activo'
LIMIT 0,10"
);

echo 
"total encontrado: ".mysql_num_rows($select);

?>
Offline

Cacofb 
Elite
Mensagens 1036 Gostos 3
Troféus totais: 34
Trófeus: (Ver todos)
Level 6 Tenth year Anniversary Linux User Mobile User Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter

Esse código é o que ja tentei.
Acho que $select tem um outro tipo de retorno.
Colei o código para o sql do phpadmin, ele retorna-me uma outra estrutura de tabela.
Offline

Bruno Mota 
Membro
Mensagens 1733 Gostos 3
Troféus totais: 28
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

<?php
 
$selectcont=mysql_query("SELECT  * FROM alunos WHERE estado='Activo'");
echo "total encontrado: ".mysql_num_rows($selectcont);
 
?>
Offline

Cacofb 
Elite
Mensagens 1036 Gostos 3
Troféus totais: 34
Trófeus: (Ver todos)
Level 6 Tenth year Anniversary Linux User Mobile User Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter

Não é isso que quero.

Eu quero reunir as queries numa apenas.

Percebes?

Obrigado
Offline

bonsempregos 
Membro
Mensagens 2008 Gostos 7
Feedback +3

Troféus totais: 29
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Poll Starter Level 5 Level 4 Level 3 Level 2

usa isto:

$dados = mysql_query(SELECT  *FROM alunos WHERE estado = 'Activo'; LIMIT 0 , 100 );

$total = count($dados);

echo $total;
echo $dados->nome;

etc

Não te esqueças que o resultado do sql query é devolvido em forma de array, se já tens os dados em array basta "brincar" com o array.
Offline

cpdesign 
Membro
Mensagens 235 Gostos 1
Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Usando Stored Procedures poderás obter multiplas saídas, tal o resultset da query e a contagem dos registos.

Em .Net é muito mais fácil porque o resultset fica num objecto com diversas propriedades, sendo uma delas a contagem dos registos retornados pela query, sem ser necessário fazer vários roundtrips à BD ou usar stored procedures.
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Em PHP, duas maneiras. Se queres retornar mesmo o valor de entradas a partir da query:


$sql 
"SELECT COUNT(ID) FROM table WHERE field='value'";
$qry mysql_query($sql) or die(mysql_error());
$arr mysql_fetch_array($qry);

echo 
'A query tem ' $arr[0] . ' entradas.';


Alternativamente podes utilizar a função mysql_num_rows, que aceita como argumento um resource (e não uma string, como mostrado no código acima):


$sql 
"SELECT ID FROM table WHERE field='value'";
$qry mysql_query($sql) or die(mysql_error());
$rows mysql_num_rows($qry);

if(!
$rows)
     
$rows 0;

echo 
'A query tem ' $rows ' resultados.';


Atenta que a função mysql_num_rows retorna FALSO quando a query não retorna nenhum resultado.