Bonjour à tous, voici mon problème :
J'ai 1 base de données avec 3 tables :
Une table adressip:
ID (PK) || IP || Rem || type
Avec IP un entier (c'est l'adresse IP convertie en décimal en fait), Rem un varchar contenant le nom de la machine et type un enum (Server, router, etc) pour le type de machine.
Une table ipping:
ID (PK) || IP || Ping
Avec Ping qui ne peut valoir que 1 ou 2 suivant si l'adresse répond au ping ou pas.
Une table ipnet:
ID (PK) || IP || Cidr || netend || Segment
Avec Cidr (varchar) l'écriture CIDR d'un réseau, netend (varchar) l'adresse de Broadcast (la dernière adresse décrivant le réseau) et Segment (enum) un endroit à spécifier par l'utilisateur.
Il y a 3 recherches que je voudrais faire :
Premièrement : Rechercher le nombre d'appareils différents par type, c'est à dire combien de Server, switch, etc DISTINCTS il y a dans ma table adressip (car par exemple un serveur peut recevoir plusieurs adresses IP mais ca ne reste qu'un seul et unique serveur).
J'ai écrit ceci :
Code :
- SELECT `type` , COUNT( type ) AS Nombre FROM
- (SELECT `type` FROM `adressip` AS T1 GROUP BY `rem`) AS T2
- GROUP BY `type` ORDER BY `Nombre` DESC
|
Et ca me donne :
type Nombre
Server 17739
Switch 9545
Firewall 3099
Mon problème avec cette première requête c'est que si j'écris ca :
Code :
- SELECT DISTINCT `rem` FROM `adresip` WHERE `typ` LIKE "Server"
|
La requête me renvoie 17901 résultats et non pas 17739 comme la première requête. Quel est le problème ici, quel nombre dois-je croire?
Ce qui est étonnant c'est que
Code :
- SELECT DISTINCT `rem` FROM `adressip`
|
renvoie exactement la même chose que
Code :
- SELECT `type` FROM `adressip` AS T1 GROUP BY `rem`
|
2ème chose :
Dans ma table ipping je vois quelles sont les adresses ip qui ne répondent pas au PING, dans ce cas, ping=2, sinon ping =1. Ce que je voudrais faire, c'est coupler ma première recherche en ne prenant en compte que les adresses IP qui répondent au ping.
Je décompose :
Code :
- SELECT ip FROM ipm_ping WHERE ping=1
|
Et ensuite pour récupérer le type des machines qui sont dans ma table adressip :
Code :
- SELECT `type` FROM adressip WHERE ip IN (SELECT ip FROM ipping WHERE ping=1)
|
Mais cette requête ne fonctionne tout simplement pas ! Elle dure infiniment et bloque même PHPMyadmin...
J'ai bien tenté autre chose mais ca ne marche pas non plus:
Code :
- SELECT `type` FROM adressip, ipping WHERE adressip.ip=ipping.ip and ipping.ping =1
|
Est-ce que vous voyez d'où peut bien provenir le problème?
La dernière :
Je voudrais savoir combien d'adresses IP il y a en moyenne par appareil.
C'est à dire que je voudrais avoir un résultat comme ceci :
type IP/Appareil
Server 10
Switch 6
Firewall 4
Mais la je bloque, j'arrive pas à écrire ma requête...
Merci d'avance à tous pour votre aide.
Message édité par dafidu le 10-05-2013 à 10:20:39