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

PHP & Base de données Discussion :

Extraction mysql dernière date en fonction de valeurs


Sujet :

PHP & Base de données

Vue hybride

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Par défaut Extraction mysql dernière date en fonction de valeurs
    bonjour à tous,

    Je souhaite exécuter une requête mysql qui trie les résultats comme expliqué ci-dessous :

    J'ai une table qui se nomme 'Historique' dans laquelle est stocké un historique complet d'interventions sur différents matériels.

    Dans cette table j'ai entre autres les colonnes suivantes : Localisation, Type matériel, Type intervention et date intervention.

    Exemple :

    Localisation | Typemat | Typeinter | Dateinter
    lieu1| mat1 | vérif | 18/08/2009
    lieu1| mat1 | vérif |19/04/2006
    lieu1 | mat1 |vérif | 19/02/2003
    lieu1 | mat1 | révis | 14/01/2008
    lieu1 | mat1 | révis | 14/02/2011
    lieu1 | mat1 | révis |17/08/2005
    lieu1 | mat2 | vérif | 18/08/2009
    lieu1 | mat2 | vérif | 19/04/2006
    lieu2 | mat1 | vérif |19/02/2003
    lieu2 | mat1 | vérif | 14/01/2008
    lieu2 | mat3 | révis | 14/02/2011
    lieu2 | mat3| révis | 17/08/2005


    Quand je fais une extraction de ces données dans php, je souhaiterais que ma requête ne prenne en compte seulement la date la plus récente en fonction du type d'intervention.

    Dans cette exemple je voudrais que ma requête sorte donc les lignes suivantes :

    Localisation | Typemat | Typeinter | Dateinter
    lieu1 | mat1 | vérif | 18/08/2009

    lieu1 | mat1 | révis | 14/02/2011

    lieu1 | mat2 | vérif | 18/08/2009

    lieu2 | mat1 | vérif |14/01/2008

    lieu2 | mat3| révis | 14/02/2011


    Voilà, merci pour votre aide

  2. #2
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Salut

    Pour classer / ordonner des données ça se fait avec ORDER BY.
    Comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT champ
    FROM une_table
    WHERE une_condition = 'truc'
    ORDER BY Localisation ASC, Dateinter ASC
    Cependant, le classement désiré risque d'être difficile à obtenir (voir impossible) du fait que tu utiliserais des noms (des chaines) au niveau des champs.
    Comme "Typeinter" -> vérif, révis, etc ...

    Le classement sera fait selon l'alphabet : Un a sera avant un b pour un ordre ascendant par exemple.
    Théoriquement, il aurait fallut des identifiants, (un champ id_typeinter par exemple), et une table à part pour y mettre les différents Typeinter (champ : id_typeinter, nom par exemple).

    Faut espérer aussi que les formats de date ici sont justes pour exemple, c'est à dire que dans la Bdd c'est bien un champ de type DATE et un format comme 2009-08-18 (au lieu de 18/08/2009).

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 55
    Par défaut
    D'accord, merci pour ta réponse, effectivement ça risque de compliquer la chose.

    sinon si je fais un "order by date desc", y'a-t-il une fonction me permettant en sql ou en php de demander que les répétitions soient ignorées.

    comme ça sql va chercher mes interventions en les classant par date décroissante et si j'ai des localisations, typemat et typeinter qui se sont similaires il ne prendrait que la première date trouvée et ignorerait les autres.

    merci

  4. #4
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    sinon si je fais un "order by date desc", y'a-t-il une fonction me permettant en sql ou en php de demander que les répétitions soient ignorées.
    Ca se fait avec GROUP BY (des regroupements).

    Exemple :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT champ
    FROM une_table
    WHERE une_condition = 'truc'
    GROUP BY Localisation
    ORDER BY Dateinter ASC
    Cependant, et si je ne dis pas de bêtises, les regroupements sont quelques peu aléatoires, disons que le classement du ORDER BY est indépendant des regroupements (ou inversement).
    C'est un peu normal aussi, car si on regroupe, ça sous entend quelles seraient les mêmes.

    En faite, si on prend exemple avec un regroupement sur la "Localisation", dans ton exemple on a 8 lieu1, ça va éliminer 7 et donc en conserver qu'un.
    La ligne conservée devrait être la 1ère qui a été insérée (la plus ancienne en quelque sorte).
    Idem pour le lieu2.

    C'est après que l'ordre va s'appliquer sur les 2 lignes retenues (lieu1 et lieu2) selon la date (si on classe par date).


    Je ne sais pas si tu vois.
    Mais le mieux c'est de faire des essais.
    Post la requête au besoin.

  5. #5
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Bonjour,
    Citation Envoyé par RunCodePhp Voir le message
    Cependant, et si je ne dis pas de bêtises, les regroupements sont quelques peu aléatoires
    Euh, non. Par contre il est tout à fait possible d'ordonner un GROUP BY en faisant ainsi :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY oneField ASC|DESC

  6. #6
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par rawsrc
    Par contre il est tout à fait possible d'ordonner un GROUP BY en faisant ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY oneField ASC|DESC
    Je ne le savais pas.
    C'est bon à savoir.
    Merci pour l'info.

Discussions similaires

  1. Recherche de date en fonction d'une seule valeur
    Par rousskoff dans le forum Excel
    Réponses: 3
    Dernier message: 06/03/2012, 21h51
  2. Réponses: 3
    Dernier message: 03/11/2010, 14h18
  3. [MySQL] Mysql Requête UPDATE en fonction d'une date
    Par xunil2003 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 27/03/2010, 02h20
  4. Dernière date de modification d'une fonction
    Par haykelFST dans le forum Développement
    Réponses: 1
    Dernier message: 26/11/2008, 20h57
  5. Réponses: 4
    Dernier message: 28/03/2007, 12h16

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