IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 MySQL Discussion :

Requete MySQL qui ne fonctionne pas


Sujet :

MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut Requete MySQL qui ne fonctionne pas
    Bonjour à tous et à toutes

    Je suis sur un projet de base de données qui enregistre l'état des machines (switchs, serveur et autre) dans une base de données MySQL

    Pour cette requete, j'ai donc deux tables,
    - la table T_Materiels qui enregistre les données de chaque materiel (nom, ip, mac, date d'achat etc. et surtout "en_service" qui précise si le materiel est en service ou en stock de secours)
    - La table T_Etats qui va stocker l'état du matériel en fonction du temps (remplie par un script) avec id_materiel (à quel materiel correspond l'état enregistré) et "etat" (oui/non)

    Comme un bon dessin vaut mieux qu'un long discours


    Je veux donc afficher le dernier etat de tous les switch dont en_service est TRUE

    Malheureusement, je sens bien qu'il me manque un truc pour que ca marche. (N'ayant d'autre formation que les tutos internet, c'est pas facile )

    voilà la requete à laquelle j'ai aboutie, qui évidemment ne marche pas

    SELECT T_Materiels.ip, T_Materiels.mac, T_Materiels.nom, T_Materiels.commentaires, T_Materiels.en_service, T_Etats.heure, Last(T_Etats.etat) AS Dernier_etat
    FROM T_Materiels INNER JOIN T_Etats ON T_Materiels.id = T_Etats.id_materiels
    GROUP BY T_Materiels.ip
    HAVING T_Materiels.en_service="TRUE";


    Si une âme charitable pouvait me dépanner, ca m'arrangerait pas mal

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 433
    Billets dans le blog
    11
    Par défaut
    Salut,

    Voici le code qui devrait fonctionner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_Materiels.ip, T_Materiels.mac, T_Materiels.nom, T_Materiels.commentaires, T_Materiels.en_service, T_Etats.heure, Last(T_Etats.etat) AS Dernier_etat
    FROM T_Materiels INNER JOIN T_Etats ON T_Materiels.id = T_Etats.id_materiels
    WHERE T_Materiels.en_service='TRUE'
    GROUP BY T_Materiels.ip;

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut
    Merci de ta réponse, mais malheureusement, celà ne marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Erreur
     
    requête SQL: Documentation
     
    SELECT T_Materiels.ip, T_Materiels.mac, T_Materiels.nom, T_Materiels.commentaires, T_Materiels.en_service, T_Etats.heure, Last(T_Etats.etat) AS Dernier_etat
    FROM T_Materiels
    INNER JOIN T_Etats ON T_Materiels.id = T_Etats.id_materiels
    WHERE T_Materiels.en_service = 'TRUE'
    GROUP BY T_Materiels.ip
    LIMIT 0 , 30
     
    MySQL a répondu:Documentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( T_Etats . etat ) AS Dernier_etat  FROM T_Materiels INNER JOIN T_Etats ON T_Mat' at line 1

    sous access, la même requete me fait un message d'erreur "Vous avez essayé d'exécuter une requête ne comprenant pas l'expression spécifiée "mac" comme une partie de la fonction d'aggrégat."

    si ca peut eclairer du monde (en attendant que je sorte des ténêbres de mon ignorance)

  4. #4
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 433
    Billets dans le blog
    11
    Par défaut
    Salut,

    Pour info : le SQL d'Access et de MySQL ne sont pas identiques.

    Mais ton problème vient de ta commande :
    Last(T_Etats.etat) AS Dernier_etat

    Que veux-tu faire avec ?

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 18
    Par défaut
    Je me suis peut être (surement) mal exprimé ^_^

    Dans la Table T_Materiels, j'ai la liste de mon materiel (en service ou en attente/service après vente)
    pour chaque entrée dans la table materiels dont le en_service est vrai (qui est donc sur le réseau) je veux récupérer le dernier enregistrement dans la table T_Etats (qui est l'historique de fonctionnement des materiels) pour voir si la dernière fois que l'on a été voir (requete ping à la con par exemple) le matériel repondait.

    et au passage, afficher l'heure de vérification d'activité (T_Etats.heure) et diverses informations sur les switchs.

    C'est plus clairs là?

    sachant que j'ai fait 2/3 modification pour être conforme aux règles ^_^ (genre les doublons de colonnes "id" ) mais rien de bien méchant

  6. #6
    Rédacteur

    Avatar de zoom61
    Homme Profil pro
    ...
    Inscrit en
    Janvier 2005
    Messages
    9 433
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Vienne (Limousin)

    Informations professionnelles :
    Activité : ...
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2005
    Messages : 9 433
    Billets dans le blog
    11
    Par défaut
    Salut,

    Dans ce cas, il faut que tu fasses une sous-requête pour récupérer la dernière valeur et ensuite récupérer toutes les info que tu souhaites sur cet enregistrement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ...
    FROM ...
    WHERE A = (SELECT ... (1 seul champ)
                      FROM ...
                      WHERE ...)
    GROUP BY ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction mysql qui ne fonctionne pas pour un ancien postgreIste
    Par floreasy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 15/01/2008, 18h49
  2. [Access] requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum Langage SQL
    Réponses: 4
    Dernier message: 15/03/2007, 12h33
  3. requete sql qui ne fonctionne pas
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 15/03/2007, 09h37
  4. Requete UPDATE qui ne fonctionne pas
    Par JiB@ dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 02/03/2007, 18h06
  5. Requete paramétrée qui ne fonctionne pas
    Par bestall666 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 18/02/2007, 21h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo