Précédent   Forum des professionnels en informatique > Bases de données > MySQL
MySQL Forum d'entraide MySQL. Avant de poster -> FAQ MySQL, Tutoriels MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/05/2011, 15h40   #1
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 882
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 882
Points : 1 026
Points : 1 026
Envoyer un message via MSN à Antoine_935
Par défaut Sélectionner les 10 plus petits nombres pairs non listés

Bonjour à toute et à tous

Dans le cadre de mon stage, je dois créer une interface de configuration de répartiteurs de charge. Une des features demandées est de suggérer des "firewall marks" qui ne sont pas encore utilisées.

J'ai donc une table virtual_server qui contient, entre autres, un champ fwmark.
Code :
1
2
3
CREATE TABLE virtual_server (
    fwmark INTEGER NOT NULL
);
Cette table contient donc des fwmarks pairs, pas forcéments consécutifs ni dans l'ordre croissant.
Exemple: 2, 16, 8, 12, 24, 62

J'ai besoin de trouver quelques (10, mettons) de ces nombres qui ne sont pas dans cette table. De préférence les plus petits possibles. Je peux, bien entendu, utiliser un select, une procédure ou quoi que ce soit, au choix.

Comment puis-je faire ça proprement ?
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2011, 17h19   #2
Membre Expert
 
Avatar de gene69
 
Inscription : janvier 2006
Messages : 951
Détails du profil
Informations personnelles :
Localisation : France

Informations professionnelles :
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : janvier 2006
Messages : 951
Points : 1 063
Points : 1 063
le tout c'est de savoir si tu as une liste de tous les fwmark dispo ou pas dans la base.

Si tu l'as il suffit de faire un "NOT IN" et un tri croissant sur le fwmark.
__________________
PHP fait nativement la validation d'adresse électronique Vous êtes perdu en PHP? rassurez-vous ici (en)
Utilisez le bouton résolu!
gene69 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 09h13   #3
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 882
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 882
Points : 1 026
Points : 1 026
Envoyer un message via MSN à Antoine_935
Le nombre de marques est limité à 2³² (voire 2⁶⁴ sur le matériel ici), donc j'aime autant ne pas définir de table qui les contient toutes
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 09h22   #4
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Bonjour,

Il doit y avoir moyen de construire une requête qui récupère tous les fwmark existants et l'écart qui sépare cet fwmark de son suivant (trié).
Attention, si la table est très grande, ça peut être source de problème de perfs.

Ensuite il faut prendre les 10 plus petits de la liste dont l'écart est > 2.
__________________
www.nudge.org Surveillez et optimisez vos applications Java
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 15h29   #5
Membre habitué
 
Avatar de bbl22
 
Inscription : février 2009
Messages : 114
Détails du profil
Informations forums :
Inscription : février 2009
Messages : 114
Points : 112
Points : 112
Si j'ai bien compris, tu souhaite récupérer la liste des nombres (les 10 plus petits) dont l'écart est supérieur ou égale à 2?

je pense qu'il te faut une deuxième table pour fait un NOT IN de ton fwmark dans ta deuxième table où tu as tes nombres.
__________________
bbl MeMa
bbl22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h31   #6
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 882
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 882
Points : 1 026
Points : 1 026
Envoyer un message via MSN à Antoine_935
Hello

Merci pour ces idées
J'ai fini par résoudre la question avec un petit bout de code. C'était tellement simple, comment n'y ai-je pas pensé plus tôt ?

Cela dit...
Citation:
Envoyé par Nudger Voir le message
Il doit y avoir moyen de construire une requête qui récupère tous les fwmark existants et l'écart qui sépare cet fwmark de son suivant (trié).
Attention, si la table est très grande, ça peut être source de problème de perfs.

Ensuite il faut prendre les 10 plus petits de la liste dont l'écart est > 2.
L'idée est intéressante, mais je ne vois pas trop comment je pourrais construire cette query . Un exemple peut-être ?
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2011, 16h50   #7
Membre Expert
 
Avatar de Nudger
 
Homme Thomas Arnaud
Directeur de projet
Inscription : octobre 2010
Messages : 452
Détails du profil
Informations personnelles :
Nom : Homme Thomas Arnaud
Âge : 36
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Directeur de projet
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2010
Messages : 452
Points : 1 012
Points : 1 012
Envoyer un message via Skype™ à Nudger
Voici ce que ça pourrait donner :
Code :
1
2
3
4
5
SELECT t1.fwmark, t2.fwmark, t2.fwmark-t1.fwmark 
FROM virtual_server t1 JOIN virtual_server t2 
WHERE t2.fwmark =
  (SELECT min(t2.fwmark) FROM test t2 WHERE t2.fwmark>t1.fwmark ) 
AND t2.fwmark-t1.fwmark > 2;
En fait cette requête retourne les fourchettes dans lesquelles il y a une ou des valeurs disponibles.
Nudger est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2011, 13h36   #8
Membre Expert
 
Avatar de Antoine_935
 
Antoine d'Otreppe
Développeur web/mobile
Inscription : juillet 2006
Messages : 882
Détails du profil
Informations personnelles :
Nom : Antoine d'Otreppe
Localisation : Belgique

Informations professionnelles :
Activité : Développeur web/mobile

Informations forums :
Inscription : juillet 2006
Messages : 882
Points : 1 026
Points : 1 026
Envoyer un message via MSN à Antoine_935
L'idée est pas mal je dois dire
Cela dit, il est vrai que ce n'est pas très gentil pour ce pauvre mysql...

Merci pour cette réponse !
Antoine_935 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h37.


 
 
 
 
Partenaires

Hébergement Web