Requêtes SQL "simples" sur 3 tables - SQL/NoSQL - Programmation
Marsh Posté le 08-05-2013 à 18:49:24
Apprends le SQL, notamment la partie sur les jointures (ici, les équi-jointures (INNER JOIN) ...
Marsh Posté le 10-05-2013 à 10:06:14
Primo, on ne sait pas ce qu'est "ipaddrs"
Deuzio, on ne fait pas de group by sans fonction d'agrégation.
Pour ton pb #1, je dirais tout simplement :
Select Count(ID), type from adresseip group by type
tu comptes le nombre d'équipements (ID) par type. Tout simplement...
Marsh Posté le 10-05-2013 à 10:35:17
toji a écrit : |
Merci de ta réponse mais le problème c'est que je voudrais le nombre d'équipement distinct. Par exemple dans la table adressip il peut y avoir un même serveur avec 10 adresses IP différentes donc 10 entrées avec 10 ID différentes mais un même Rem et Type. Et je voudrais le compter qu'une seule fois.
Marsh Posté le 10-05-2013 à 17:04:46
J'avais pas compris que l'équipement c'était rem :
Select Count(distinct rem), type from adresseip group by type
Donc tu comptes les rem différents/distincts par type...
Marsh Posté le 13-05-2013 à 16:00:37
Ok, merci, ca me donne bien le résultat !
Est-ce que tu aurais une piste pour mon 3eme problème?
Merci d'avance!
Marsh Posté le 08-05-2013 à 15:37:58
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 :
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 :
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
renvoie exactement la même chose que
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 :
Et ensuite pour récupérer le type des machines qui sont dans ma table adressip :
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:
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