Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1543 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requêtes SQL "simples" sur 3 tables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requêtes SQL "simples" sur 3 tables

n°2189341
dafidu
Posté le 08-05-2013 à 15:37:58  profilanswer
 

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 :
  1. SELECT `type` , COUNT( type ) AS Nombre FROM
  2.                 (SELECT `type` FROM `adressip` AS T1 GROUP BY `rem`) AS T2
  3. 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 :
  1. 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 :
  1. SELECT DISTINCT `rem` FROM `adressip`

renvoie exactement la même chose que

Code :
  1. 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 :
  1. 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 :
  1. 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 :
  1. 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
mood
Publicité
Posté le 08-05-2013 à 15:37:58  profilanswer
 

n°2189388
rufo
Pas me confondre avec Lycos!
Posté le 08-05-2013 à 18:49:24  profilanswer
 

Apprends le SQL, notamment la partie sur les jointures (ici, les équi-jointures (INNER JOIN) ;)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2189561
toji
i am disappoint
Posté le 10-05-2013 à 10:06:14  profilanswer
 

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...
 
 

n°2189569
dafidu
Posté le 10-05-2013 à 10:35:17  profilanswer
 

toji a écrit :


Select Count(ID), type from adresseip group by type


 
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.


Message édité par dafidu le 10-05-2013 à 10:35:40
n°2189620
toji
i am disappoint
Posté le 10-05-2013 à 17:04:46  profilanswer
 

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...

n°2189962
dafidu
Posté le 13-05-2013 à 16:00:37  profilanswer
 

Ok, merci, ca me donne bien le résultat !
 
Est-ce que tu aurais une piste pour mon 3eme problème?
 
Merci d'avance!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requêtes SQL "simples" sur 3 tables

 

Sujets relatifs
Requête Sql - Trouver dates les plus prochesRequête SQL : Même occurence dans une colonne
Access: relation entre 3 tablesImporter un fichier ACCESS dans SQL SERVER
Problème d'accent dans un mail.php uniquement les requêtes sql[SQL] Requete date
Besoin d'aide Script PHP/SQLrequete SQL et variables
Requete SqLSQL probleme avec LIKE
Plus de sujets relatifs à : Requêtes SQL "simples" sur 3 tables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR