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 :

Trier sur un champ dans un SELECT [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut Trier sur un champ dans un SELECT
    Bonjour à tous,
    Voila j'ai une table 'comptes' qui comporte différents champs : no_compte, libelle, montant etc... et année.
    Je voudrais sélectionner que les enregistrements ou l'année est la plus récente.(pour certains c'est 2004, pour d'autres 2013)
    J'ai essayé différentes possibilités mais je n'obtiens pas le résultat souhaité...
    D'avance merci pour votre aide.

  2. #2
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    select no_compte, libelle, montant ,..., année from comptes order by année;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Merci à toi Patrick, mais avec ta solution j'aurai aussi les années qui ne m’intéressent pas...

  4. #4
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select no_compte, libelle, montant ,..., année from comptes order by année;

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT * FROM comptes BETWEEN '700' AND '800' WHERE biens_idbien='".$idbiens."' AND compte_annee = '2013' ORDER BY compte_numero ASC"
    Voilà la requête que je veux écrire sachant que 2013, peut être 2012 ou 2011 ... ou 2004. Et je veux récupérer les comptes des trois dernières années saisies les plus récentes, comprends tu mieux ma demande ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $annee = 2004;
    $sql = "SELECT * FROM comptes BETWEEN '700' AND '800' WHERE biens_idbien='".$idbiens."' AND compte_annee BETWEEN " . $annee . " AND " . ($annee + 2) . " ORDER BY compte_numero ASC"
    bon je soupconne que ce n'est pas encore ça que tu veux mais tu as un peu du mal à nous décrire ton cas.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Merci de ton aide.
    Effectivement, ce n'est pas exactement ça. Dans ma table j'ai des enregistrements pour le même id_biens sur année n, n-1, n-2 etc. Je voudrais n'afficher que les n si ils existent, sinon les n-1, sinon les n-2 etc. Est ce plus clair ?

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM comptes BETWEEN '700' AND '800' WHERE biens_idbien='".$idbiens."' ORDER BY compte_annee DESC LIMIT 3";

  9. #9
    Membre éprouvé Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    c'est alambiqué comme solution mais bon :
    dans T2 tu sélectionnes les années qui te concerne que tu regroupe et que tu trie et dont tu limite les résultats a 3
    et tu fait une jointure avec ta requête initiale T1 et il te sort les records qui ne concerne que les 3 années

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "SELECT * from comptes as T1
    join ( SELECT compte_annee FROM comptes WHERE biens_idbien='".$idbiens."' group by compte_annee order by compte_annee desc limit 0,3) as T2 
    on T1.compte_annee = T2.compte_annee
    WHERE T1.biens_idbien='".$idbiens."' ORDER BY T1.compte_numero ASC"

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Je teste çà et te réponds dans la soirée ou demain, en tout cas merci de ton aide.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Points : 79
    Points
    79
    Par défaut
    Avec les deux dernières solutions proposées, on trouve les enregistrements de toutes les années, certes triés, mais de toutes les années.
    Comme dit précédemment, je vais régler cette difficulté grâce à un script qui déterminera l'année à rechercher. Mais je suis presque sûr qu'il existe une solution 'pure' SQL pour ce type de problème ;-) Merci à tous pour votre aide.

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Etant donné que tu ne décris pas l'organisation de tes données, c'est très compliqué de comprendre ou tu veux en venir.
    Il faut suffit d'un exemple simple mais entier.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2014, 19h51
  2. [AC-2007] Trier sur un champ calculé dans un FormulaireContinu
    Par symbabeauchat dans le forum VBA Access
    Réponses: 2
    Dernier message: 24/06/2011, 15h27
  3. Réponses: 1
    Dernier message: 21/04/2010, 10h41
  4. [interbase][SQL] concatener 2 champs dans le select
    Par Harry dans le forum Bases de données
    Réponses: 10
    Dernier message: 09/03/2006, 06h45
  5. Réponses: 13
    Dernier message: 20/07/2004, 08h54

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