Bonjour,

J'ai un petit problème : je dois exécuter une requête SQL et je voudrais diviser les resultats obtenus sans perte de données. En gros, la requête doit faire un "BETWEEN a AND b". J'ai donc deux entiers A et B ainsi qu'un nombre de parties désiré C (approximatif, le plus important c'est d'avoir toutes les données sans doublons).

Par exemple, j'ai réussi à avoir un algo qui me donne si A = 0, B = 10 et C = 5 (même chose si C = 4...) les valeurs suivantes [0,2], [3,5], [6,8], [9,10].

Comme ça après au lieu de faire ma requête SQL "BETWEEN 0 AND 10" je peux faire 4 requêtes "BETWEEN 0 AND 2", "BETWEEN 3 AND 5" etc.

L'algorithme fonctionne bien (en tout cas pour les valeurs testées...) mais il est assez expérimental et je me demandais si y a pas quelque chose de plus correct.

Voici l'algo (en Java)

Code java : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 
import java.util.Scanner;
 
public class Main {
 
    public static void main(String[] args) {
        int aMin;
        int aMax;
        int nbParts;
 
        Scanner sc = new Scanner(System.in);
        System.out.print("Min = ");
        aMin = sc.nextInt();
        System.out.print("Max = ");
        aMax = sc.nextInt();
        System.out.print("NbParts = ");
        nbParts = sc.nextInt();
 
        int onePart = ((aMax - aMin) / nbParts);
 
        System.out.println(onePart);
 
        if(aMin == aMax)
        {
            // 1 process
            System.out.println("Only one process with nb = " + ((aMin + aMax)/2));
        }
        else if(aMin < aMax)
        {
            // If nbParts > (aMax-Min) => onePart = 0
            if(onePart == 0)
            {
                System.out.println("Infinite loop.");
                System.exit(-1);
            }
 
            System.out.println("Several processes begin.");
 
            for(int i = aMin; i < aMax; i += (onePart + 1))
            {
                int from = i;
                int until = (i + onePart);
 
                if(i > (aMax - onePart)) {
                    System.out.println("------------- LAST -------------");
                    System.out.println("FROM = " + from);
                    System.out.println("UNTIL = " + aMax);
                    break;
                }
 
                System.out.println("----------- ONE PROCESS -----------");
                System.out.println("FROM = " + from);
                System.out.println("UNTIL = " + until);
            }
        }
        else
            System.out.println("ERROR !");
    }
}