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 :

Grouper resultats une requete SQL [MySQL]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 80
    Points
    80
    Par défaut Grouper resultats une requete SQL
    Bonjour à tous,
    étant nouveau sur le forum je m'excuse d'avance sur le sujet a déjà été abordé.

    Voici ce que je cherche à faire:
    J'aimerai grouper les résultats d'une requete SQL par date précisement par année.
    J'ai une table avec divers champs (id,titre, contenu, type, date).
    Chaque enregistrements est rentré dans une interface admin web et la date est sous la forme YYYY-mm-DD.

    J'ai essayé de faire ma requete avec "GROUP BY date" mais je n'ai cogité qu'apres que toutes les dates sont différentes à l'exception des années.
    Au final je voudrai que les enregistrements soient groupé et listé par années en ordre décroissant.
    Si quelqu'un a une idée je suis à votre écoute.
    Merci d'avance.

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 43
    Points : 39
    Points
    39
    Par défaut
    salut,

    si ton champs date est de type datetime, tu peux utiliser la fonction YEAR dans ton order by :

    fonction year sur www.mysql.com

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 80
    Points
    80
    Par défaut
    Merci de ton aide varex, mais ce n'est pas exactement ce que je cherche.

    J'aimerai lister toute la table puis grouper et afficher les résultats par années.
    Par exemple j'ai:
    3 resultats en 2009
    2 resultat en 2008
    4 resultat en 2007

    et j'aimerai detecter lorsque je fait mon "while($select=mysql_fetch_assoc($envoi))"
    si la date change.
    Par exemple afficher les resultats de 2009 en rouge.
    Des que la date passe à 2008 afficher les resultat en bleu
    Des que la date passe à 2007 en vert.

    Désolé si je me suis mal exprimé lors de mon premier post.

  4. #4
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 456
    Points : 4 612
    Points
    4 612
    Par défaut
    Citation Envoyé par Friksstyle Voir le message
    listé par années en ordre décroissant.
    quand on ne precise rien, c'est par ordre croissant. sinon, il faut utiliser DESC
    ORDER BY year(date) DESC

    apres, dans ton while, tu peux faire un switch

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    switch($row['date'])// ou $row = mysql_fetch_assoc($ta_raquete);
    {
     case "2009":
      $couleur="#FF0000";
     break;
     case "2008":
      $couleur="#0000FF";
     break;
     case "2007":
      $couleur="#00FF00";
     break;
    }
    echo '<font color="'.$couleur.'">tes infos</font>';
    j'ai pas teste mais c'est ca l'idee.
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 80
    Points
    80
    Par défaut
    Merci Doksuri ca m'aide énormément.
    Seul hic.
    C'est qu'il est possible que le nombre d'années évolue.
    Dans le code que tu m'a donné on suppose qu'il n'existe que 3 trois années possible.
    Mais voulant automatisé le tout je cherche à detecter le nombre d'année différentes.
    Il est possible à l'avenir qu'il y ai 5 années ou plus que 2....
    Avec un explode avant ca marcherait? Puis en comptant le nombre de cas differents.
    Ou existe-t-il un moyen plus simple?

  6. #6
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 456
    Points : 4 612
    Points
    4 612
    Par défaut
    ca depends de comment tu vois les choses :

    si c'est toujours l'annee en cours en rouge, l'annee precedente en blue, l'annee encore avant en vert etc...
    tu peux faire
    annee="#FF0000"
    annee-1="#0000FF"
    annee-n="#00FF00"
    etc

    ou alors un array
    $couleurs=array("2009"=>"#FF0000", "2008"=>"#0000FF", "2007"=>"#00FF00", etc);
    apres, echo $couleur[$ton_annee];

    sinon, j'ai pas trop d'idees la
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

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

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 80
    Points
    80
    Par défaut
    Ce n'est pas tant les couleurs qui me gene car c'etait plus un exemple qu'autre chose.

    Mon soucis c'est que dans ma table la date est sous le format YYYY-mm-DD
    Je cherche à compter combien il existe d'enregistrement (jusque là aucun soucis).
    Mais ensuite je veux savoir combien il y a d'années différentes.
    Et c'est là que je bute.
    Comment compter le nombre d'année différentes?

    Faudrait-il que je liste toutes les années, que je les explose (avec la fonction explode) pour récuperer uniquement l'année?
    Mais apres, comment faire pour comparer si cette année à deja été compté ou non?
    Faut-il créer un tableau vide, rentrer l'année non existante, continuer de lister et si on trouve une nouvelle année existante on la rentre dans le tableau?

    Une fois que j'ai le nombre d'année différentes je les mets dans un tableau et là j'utilise ton code avec le switch Doksuri.

    EDIT
    Voici un morceau de code que j'ai essayé de pondre pour compter le nombre d'années différentes mais il foire aussi. Je suis en train de travailler dessus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    $sql="SELECT id, titre, contenu, date FROM realisation ORDER BY date DESC";
    $envoi=mysql_query($sql);
     
    $i = 0;
    $tab = array ();
     
    $num = mysql_num_rows($envoi);
    $select=mysql_fetch_assoc($envoi);
    while($select=mysql_fetch_assoc($envoi))
    {
    $date = explode("-", $select['date']);
    $annee = $date[0];
    for ( $z=0; $z<$num; $z++)
    {
    if ($annee !== $tab[$z])
    {
    $tab[$z] = $annee;
    }
    }

  8. #8
    Expert confirmé
    Avatar de Doksuri
    Profil pro
    Développeur Web
    Inscrit en
    Juin 2006
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 456
    Points : 4 612
    Points
    4 612
    Par défaut
    il faudrait que tu fasse une requete sql du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(DISTINCT column_name) AS total FROM table_name
    et pour afficher utilise $row['total']
    La forme des pyramides prouve que l'Homme a toujours tendance a en faire de moins en moins.

    Venez discuter sur le Chat de Développez !

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    149
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 149
    Points : 80
    Points
    80
    Par défaut
    Malheureusement je ne peux pas utiliser distinct dans ma requete car il y a les mois et les jours dans la colonne date avec l'année.
    Si j'ai 100 enregistrements avec 100 dates différements mais avec 99entreé dont l'année est 2009 et une seule avec l'année 2008.
    La requete va me retourner 100 comme résultat.

    Vu la complexité je me demande si je ne vais pas faire une colonne pour les années, les jours et les mois

    Non pas que je doute de toi Doksuri bien au contraire mais ca risque d'etre plus facile à trier en faisait une colonne différente à chaque fois. ^_^

    En attendant de prendre cette décision je retourne sur le bout de script que j'ai donné tout à l'heure j'ai l'impression que je partais sur la bonne voie.

    EDIT
    J'ai trouvé la solution de ce que je voulais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while($select=mysql_fetch_assoc($envoi))
    {	
    $date = explode("-", $select['date']);
    $annee = $date[0];
    if ( $annee !== $tab[$i])
    {
    $i++;
    $tab[$i] = $annee;
    }
    }

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

Discussions similaires

  1. Concatenation des resultat d'une requete SQL
    Par zian974 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/09/2006, 13h56
  2. [SQL] Concatenation des resultat d'une requete SQL
    Par zian974 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 05/09/2006, 13h11
  3. Réponses: 6
    Dernier message: 31/07/2006, 10h18
  4. modifier les resultats d'une requete SQL
    Par billyboy dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 30/05/2006, 06h22
  5. Réponses: 1
    Dernier message: 25/10/2005, 12h18

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