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 !"); } }
Partager