2009-08-25 7 views
1

Je veux obtenir un résultat de sql avec des lignes illimitées, je ne veux pas utiliser limit dans mon instruction sql car j'ai besoin de connaître le nombre total de lignes. Mais je veux juste echo, par exemple la ligne 30-60.Écho ligne 30 avec php de résultat sql?

J'utilise php.

Répondre

1

http://php.net/manual/en/function.mysql-data-seek.php

mysql_data_seek() déplace le pointeur de rangée interne du résultat MySQL associé à l'identifiant de résultat spécifié pour indiquer le numéro de ligne spécifié. L'appel suivant à une fonction de récupération MySQL, tel que mysql_fetch_assoc(), retournera cette ligne.

mysql_data_seek($res, 30); 
for ($i = 0; $i < 30; ++$i) { 
    $row = mysql_fetch_assoc($res); 
    var_dump($row);  
} 
+0

mysql_data_seek a fait le travail. Merci beaucoup! :) Heureux à nouveau. – Johan

+1

ce n'est pas forcément une bonne idée. cela signifie que vous pourriez extraire plus de données que nécessaire, ce qui pourrait s'avérer moins efficace que d'exécuter deux requêtes (une pour les données limitées, une pour les données) –

+0

également s'il y a moins de 30 lignes disponibles -loop continuerait au-delà des données disponibles. –

4

d'abord, exécutez cette déclaration:

SELECT SQL_CALC_FOUND_ROWS 
     * 
FROM mytable 
ORDER BY 
     mycol 
LIMIT 30, 30 

, chercher les lignes et les enregistrer dans un tableau.

Juste après, exécutez cette déclaration:

SELECT FOUND_ROWS() 

, qui vous montrera le nombre total de lignes qui seraient renvoyées par la déclaration précédente là aucune clause LIMIT.

+0

Et comment puis-je faire écho au total des lignes avec php? – Johan

+1

Ce sont deux instructions. Avec le premier vous obtenez les lignes (enregistrez-les dans un tableau ou ailleurs), avec le second vous obtenez le nombre total de lignes. – Quassnoi

0
$query=mysql_query("SELECT...."); 
$array=array(); 
while($row=mysql_fetch_row($query)){ 
$array[]=$row; 
} 

Maintenant, vous avez le tableau $ array qui contient toutes les lignes. Si vous voulez imprimer seulement la ligne entre 30 et 60 utilisez:

for($i=30;$i<60;$i++) echo $array[$i][0]; 
0

Je crois Quassnoi signifie ceci:

SELECT SQL_CALC_FOUND_ROWS * FROM accounts ORDER BY accountID LIMIT 30 

puis exécutez cette instruction select pour trouver le nombre de lignes:

select found_rows(); 

Vous n'êtes pas censé faire des requêtes en utilisant le *, bien sûr, car cela nuit aux performances. Utilisez les noms des colonnes dont vous avez besoin. Je pense que ce serait le meilleur moyen, car c'est le plus efficace. Il n'est pas nécessaire de retourner votre table entière si vous avez seulement besoin d'un compte et de 30 rangées.

Questions connexes