Grouper des id par date

Discussion dans 'Web, design' créé par Spo0n, 18 Janvier 2005.

Statut de la discussion:
Fermée.
  1. Offline
    Spo0n Dr. Gonzo
    Bonsoir. :)

    J'aimerai grouper des id par date... (exemple: 5 id le 17/01/2005, 7 le 18,...). J'utilise donc comme requête la suivante:

    Code:
    $sql = "select * from links group by jour order by id desc";
    Il regroupe bien par jour et tout mais le problème c'est qu'il n'affiche QU'UNE SEULE id par jour, et non touts...

    Que faire ? Merci. :)
    Spo0n, 18 Janvier 2005
    #1
  2. Offline
    zoheir cvm.mangaleet()
    tu peux utiliser un WHERE tout simplement
    c'est difficile de dire comme cela sans savoir la ou les structures de tes tables
    zoheir, 18 Janvier 2005
    #2
  3. Offline
    Spo0n Dr. Gonzo
    Code:
    <table width="600px" class="taff">
    <?
    mysql_connect("localhost", "pass", "");
    mysql_select_db("db");
    
    $sql = ("SELECT * FROM links GROUP BY jour ORDER BY id DESC");
    
    $req = mysql_query($sql) or die('Erreur SQL !
    '.$sql.'
    '.mysql_error());
    
    
    while($data = mysql_fetch_array($req)) {
    ?>
    <tr>
    <td width="80px"></td>
    <td width="22px"></td>
    <td width="500px" class="ligne" style="border-bottom: 2px solid #000000;font-weight:bold;font-size:16px;text-align:right;"><? echo $data['jour']; ?></td></tr>
    <tr>
    <td width="80px" class="ligne"><? echo $data['pseudo']; ?></td>
    <td width="22px" class="ligne"></td>
    <td width="500px" class="ligne"><a href="<? echo $data['lien']; ?>" target="_blank"><? echo $data['texte']; ?></a></td>
    </tr>
    <?
    }
    ?>
    </tr>
    </table>
    
    Enfin bref, même sans table, j'ai quand même ce prob. ;)
    Spo0n, 18 Janvier 2005
    #3
  4. Offline
    zoheir cvm.mangaleet()
    non jparlais de ta DB :)

    comme je te l'ai dit utilise un WHERE ca devrait le faire

    ou bien un GROUP BY .. HAVING.., ca dépend vraiment de ta table
    zoheir, 18 Janvier 2005
    #4
  5. Offline
    Spo0n Dr. Gonzo
    Ca servirait à rien avec ce que je voudrai faire:

    [IMG]
    Spo0n, 18 Janvier 2005
    #5
  6. Offline
    zoheir cvm.mangaleet()
    pourquoi ça?
    zoheir, 18 Janvier 2005
    #6
  7. Offline
    Spo0n Dr. Gonzo
    Puisque je dois grouper toutes les IDs par jour. ;)
    Spo0n, 18 Janvier 2005
    #7
  8. Offline
    seeya ex membre
    rien à voir je crois.

    le truc est de trier ta requete par date et ensuite ton code qui affiche le "tableau" doit faire un "saut" à chaque nouvelle date rencontrée ... c'est la meme chose dans tous les languages :wink:

    EDIT ---

    et en effet filtrer sur l'id de ton "user" pour n'avoir que les records le concernant.
    seeya, 18 Janvier 2005
    #8
  9. Offline
    zoheir cvm.mangaleet()
    SELECT * from links WHERE champ_date = date ORDER BY id DESC

    pq ca ne marcherais pas?
    zoheir, 18 Janvier 2005
    #9
  10. Offline
    seeya ex membre
    ah bhen, j'aurais dit le contraire:

    Code:
    SELECT * from links WHERE id = XX ORDER BY champ_date DESC
    puis le code de présentation doit gérer le changement de date (et faire une jolie séparation).

    car faire une requete par date, ça risque d'etre assez lourd quand-meme ...
    seeya, 18 Janvier 2005
    #10
  11. Offline
    Spo0n Dr. Gonzo
    Je comprends pas pourquoi tu fais un ID = xx. :pfiou:
    Spo0n, 18 Janvier 2005
    #11
  12. Offline
    zoheir cvm.mangaleet()
    apparemment tu veux regrouper toutes les lignes de ton champ avec une date précise c'est bien ça ?

    donc l'id n'est pas connu

    donc ma requete devrait fonctionner
    zoheir, 18 Janvier 2005
    #12
  13. Offline
    seeya ex membre
    bien, sur l'image que tu présentes, apparemment ce sont les records propres à 1 utilisateur, tout simplement. Pourquoi ramener les enregistrements de tous les users si ce n'est que pour présenter ceux d'1 seul (spoOn sur la photo)?

    maintenant, je n'ai peut etre pas bien saisi ce que tu voulais?..
    seeya, 18 Janvier 2005
    #13
  14. Offline
    Spo0n Dr. Gonzo
    Bon...
    Chaque jour, je rajoute des liens. Chaque lien a une ID. Et j'aimerai regrouper ces IDs par date.
    Spo0n, 18 Janvier 2005
    #14
  15. Offline
    seeya ex membre
    ok ... bon, on retire le parametre "user".

    mais l'astuce reste la meme.

    a vrai dire, tu t'en fous de "regrouper" par date!

    ta requete doit simplement etre triées par date, de la plus récente à la plus ancienne (comme sur la photo).

    une seule requete suffit, sans group by même; je m'explique:

    une fois que tu auras le jeu d'enregistrements (donc les liens triés par date), ton code va parcourir chaque enregistrement, un par un (movenext). à chque fois qu'un changement de date est detecté, avant d'afficher une ligne standard (spoOn - lien -bla bla), ton code va d'abord afficher la date avec un bon gros jolie trait pour bien séparer.

    ok?

    en fait, tu dois plus regarder au niveau de ton code qu'au niveau de ta requete, qui finallement est toute simple en somme.
    seeya, 18 Janvier 2005
    #15
  16. Offline
    zoheir cvm.mangaleet()
    le mieux c'est de trier par ta requete, pcq ton opération sollicitera trop la DB
    zoheir, 18 Janvier 2005
    #16
  17. Offline
    seeya ex membre
    l'ideal etant meme de construire le code HTML dans la requete ... mais bon, je vais pas m'eterniser sur le sujet :wink:

    sinon, stocker dans un tableau et refermer direct le recordset. hop, plus de connexion à la db ... en contre partie, faudra bcp plus de mémoire ...

    chacun son truc. l'ideal etant quand meme d'avoir une procedure stockée (connais pas l'equivalent en MySQL) qui retourne directement le code HTML; ça c'est nickel mais demande un travail plus ardu.

    yop.

    bonne prog' :cool:
    seeya, 18 Janvier 2005
    #17
  18. Offline
    Spo0n Dr. Gonzo
    Ma méthode au départ est la plus simple, mais je ne comprends pas pourquoi il ne met pas TOUTES les ID triées par date. =/
    Spo0n, 18 Janvier 2005
    #18
  19. Offline
    Bartdude Touriste
    parce que dans ta requête de départ, tu utilises un GROUP BY... c'est à ca que ca sert le group by. Si tu veux uniquement trier sur 1 champ donné , c bêtement ta clause order by qui sert !

    Le plus simple selon moi c'est comme le dit theo, de sélectionner tes trucs triés par date, et dans ta boucle d'affichage, tu fait ce qu'il faut (mettre une séparation, en l'occurence) quand tu sautes d'une date à l'autre.
    Bartdude, 18 Janvier 2005
    #19
  20. Offline
    MbK_ Etudjant
    si je comprends bien tu veux afficher tes champs par date?

    tu enregistre le timestamp et tu le classe par grandeur...

    j'ai mal compris?
    MbK_, 18 Janvier 2005
    #20
Statut de la discussion:
Fermée.