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 :

[Conception] Classement par date et id : donner la priorité


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut [Conception] Classement par date et id : donner la priorité
    Bonjour,

    Je bute sur un problème pour mon forum :
    Jusqu'ici je classais les nouveaux sujets par id décroissant (c'est plus rapide que par la date), le dernier se plaçant en haut de la liste, comme sur tous les forums.

    Maintenant je veux que lorsqu'un sujet reçoit une réponse, ce sujet reviennent en haut de la liste même si d'autres sont plus récents, comme sur tous les forums aussi.

    Donc j'ai placé un champ 'derniereRep' dans la table 'sujet', qui est updaté à chaque nouvelle réponse.

    C'est facile maintenant de classer les sujets selon l'ordre de leur dernière réponse.

    Oui mais le tout dernier sujet doit se placer en haut de la liste, même si il n'a pas eu encore de réponse.


    Alors là vraiment je m'embrouille un peu ! Si vous avez l'expérience de ce genre de trucs, je veux bien la recette.


    Merci d'avance.


    **edit**

    Je vois bien une recette un peu lourde :
    je crée un champ 'idNew' .
    A chaque nouveau sujet, je selectionne le MAX idNew et je l'incrémente de 1.
    Idem pour chaque nouvelle réponse.
    Et puis je fais un order by idNew.

    ça devrait fonctionner qu'en pensez-vous ?
    C'est pas parce que j'ai tort que vous avez raison.

  2. #2
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    classe par date de mise à jour, sachant que cette date est mise à jour dès qu'une réponse y est postée.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Merci pour ta réponse Mister N

    A moins d'avoir mal compris celle-ci, c'est ce que j'ai dit que je compte faire.
    Mais ça ne résoud pas le problème posé :

    Le dernier sujet n'a pas de réponse, donc rien dans la table mise à jour :
    Comment fais-tu dans ce cas pour le placer en haut de la liste et pour ensuite classer ceux avec des réponses selon leur date de mise à jour ?
    Idem si il y a plusieurs nouveaux sujets, ils doivent se classer les uns derrrière les autres, en attendant qu'un sujet avec une mise à jour les devance.


    **edit** donc je pense à cela, comme dans mon précédent edit :

    Je crée un champ newId dans la table sujet.
    A chaque nouveau sujet ou chaque nouvelle réponse, je sélectionne le MAX de newId parmi tous les sujets ayant la même clef étrangère (idSujet).
    Là je l'incrémente de 1.
    En cas de suppression à postériori d'un message, je le décrémente de 1.

    A priori je ne vois pas de bug en vu, et vous ? Si deux tuples ont le même newId suite à une décrémentation, que va-'il se passer ?
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    1    01/01/2006    20     02/01/2006      'Sujet #1 créé le 1 janvier, date de mise a jour = date dernière reponse (#20) : 2 janvier'
    2    03/01/2006    -1     03/01/2006      'Sujet #2 créé le 3 janvier, date de mise à jour = date de creation car pas de réponse  (#-1) : 3 janvier'

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    A oui,

    tu veux dire que je crée un 'champ mise à jour'.

    Par défaut celui-ci est incrémenté lors de sa création avec la même date que le champ 'date de création'.

    Ensuite on update à chaque mise à jour.

    Si j'en supprime un, je vais chercher la date de la dernière réponse pour ce sujet et je l'insère à la place de celle du tuple supprimé.


    C'est cela ? je suis un surdoué ?
    C'est pas parce que j'ai tort que vous avez raison.

  6. #6
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Citation Envoyé par psychoBob
    C'est cela ?
    Oui. C'est juste une proposition, il y a surement d'autres soluces, toutes les unes plus ou moins propres que les autres
    Citation Envoyé par psychoBob
    je suis un surdoué ?
    Non. Tu n'aurais pas besoin d'être sur ce forum

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Disons que j'aurais voulu éviter un ORDER BY sur la date, ça doit être assez long à classer, surtout par rapport à un classement sur des ID.

    Vous en pensez quoi ?
    C'est pas parce que j'ai tort que vous avez raison.

  8. #8
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Ben je pense que déjà ta colonne doit être de type "date" (ou equivalent).
    Ensuite je sais pas si elle doit être indexée, si oui tes tables doivent être "analyzer" pour des perfs optimales. Un "explain" de la requete est fort utile pour ça.

    Ensuite avec un petit cache maison ca devrait booster.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Je n'ai rien compris à analyser, cache et explain...

    C'est très utile ces engins là ? Histoire de me motiver pour plonger dans un tuto, le cas échéant.
    C'est pas parce que j'ai tort que vous avez raison.

  10. #10
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    ANALYZE TABLE est très très ... très utile à partir du moment ou tu fais des jointures. Je ne sais pas l'impact sur un simple order by.
    EXPLAIN est très très ... très utile pour savoir comment le moteur de mysql va planifier l'execution de la requete surtout pour des jointures. Ceci permet de savoir si des index sont bien placés.

    cache, ben quand tu regardes le nombre de lecture d'un sujet / nombre de réponse/édition, tu te dis vite que d'une lecture à une autre, pas beaucoup de chose n'ont changé, et qu'il est inutile de refaire une requète sql. Il suffit de renvoyer le résultat de la dernière lecture, et ce jusqu'à la prochaine modif (new/update/delete)

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    ç'est compliqué à gérer le cache ?
    C'est pas parce que j'ai tort que vous avez raison.

  12. #12
    Expert éminent Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Points : 6 449
    Points
    6 449
    Par défaut
    Algo simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Si le cache correspondant à l'url demandée n'existe pas alors
       générer la page comme d'hab tout en capturant le flux sortant
       stocker le flux sortant en fonction de l'url demandée dans un cache
       envoyer le flux vers le navigateur
    sinon
       envoyer le contenu du cache vers le navigateur
    finsi
    Simple comme bonjour ou presque.
    Le plus dur est d'effacer les caches quand il y a besoin. Pour ça le plus simple est de tout effacer, le mieux étant de n'effacer que ce qui est impacté.

    Bref tu peux faire les choses très facilement est très simplement, ce sera toujours mieux que rien, mais tu peux aussi faire les choses très finement, en gèrant les headers http et tout et tout...

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    Ok merci Mr N,

    Je vais approfondir la question.

    ça va faire l'objet de nouveaux posts je crois...
    C'est pas parce que j'ai tort que vous avez raison.

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

Discussions similaires

  1. [MySQL-5.1] Classement par date/heure
    Par Invité dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/09/2013, 14h42
  2. [AC-2010] classement par date
    Par mcaiki dans le forum VBA Access
    Réponses: 2
    Dernier message: 25/08/2011, 09h50
  3. RecordSet classement par date
    Par Linio dans le forum ASP
    Réponses: 9
    Dernier message: 21/05/2008, 20h55
  4. [MySQL] Classement par date
    Par gunth dans le forum PHP & Base de données
    Réponses: 16
    Dernier message: 15/02/2008, 18h04
  5. Problème classement par date
    Par Triomen dans le forum Langage SQL
    Réponses: 12
    Dernier message: 06/09/2005, 14h09

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