2012-08-17 6 views
1

Y at-il des solutions sur le script MySQL pour filtrer les résultats avec un numéro d'intervalle spécifique. Par exemple, si j'ai 100 000 enregistrements dans la base de données et que je ne souhaite obtenir que le numéro d'enregistrement 1000, 2000, 3000, etc. (étape par 1000).MySQL obtenir des enregistrements d'intervalle

je pouvais le faire sur le script côté serveur en obtenant les résultats entiers (par exemple 100 000) et utiliser la syntaxe comme:

for($i=0, $i <= 100,000, $i = $i+1000) $filterResult[] = $record[$i]; 

Cependant, comme vous pouvez le voir, il se retirerait du stress au système 100.000 dossiers devra générer en premier.

Y a-t-il des solutions qui pourraient compléter à partir du script de base de données? Veuillez noter que la clé primaire ne peut pas commencer avec 1 - 100 000 car les résultats sont basés sur une condition de la clause where.

Votre aide serait très appréciée.

Répondre

5

Vous pouvez faire:

SELECT * 
FROM tbl 
WHERE id % 1000 = 0 

Mais il semble que vous ne voulez pas compter sur la valeur de clé primaire, mais le classement de la ligne d'un jeu de résultats.

Dans ce cas, vous pouvez faire:

SELECT * 
FROM (
     SELECT  *, @rn:[email protected]+1 AS rank 
     FROM  tbl 
     CROSS JOIN (SELECT @rn:=0) var_init 
     WHERE  column1 = value AND 
        column2 = value 
     ) a 
WHERE a.rank % 1000 = 0 

column1 = value AND column2 = value est juste un espace réservé pour quelque filtration que vous faites dans votre requête.

+0

Merci Zene. Cependant, je ne peux pas compter sur ID car il n'est pas exécuté dans l'ordre numérique. par exemple. les 10 premiers enregistrements peuvent avoir l'ID 199,425,122,111, .... – Chanon

+0

@Chanon, je viens de mettre à jour la solution. Essayez ça. –

+0

@ZaneBien Est-ce que c'est important, ils ne sont pas dans l'ordre - l'ajout d'une commande par entraînera un tri de fichiers après et votre première requête fonctionnerait très bien. –

Questions connexes