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

Langage PHP Discussion :

Demande d'info : Requête SQL


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 56
    Points
    56
    Par défaut Demande d'info : Requête SQL
    Bonjour,

    Je réalise en ce moment un petit forum pour mon site.
    Je le veux basique mais cependant optimisé.

    Je me posais une question au sujet du comptage des messages.
    Pour que se soit optimiser, au lieu de compter à chaque fois à l'aide d'une requête le nombre de message dans une catégorie et l'afficher, je souhaitais mettre un champ "nbMessage" dans ma catégorie et quand une personne ajoute un poste, incrémenter mon nombre de message.

    Là il y aurait deux requêtes. La requête INSERT pour ajouter mon message et une requête UPDATE pour incrémenter mon nombre de message.
    Est-il possible que la requête INSERT se face correctement mais que la requête UPDATE bug (si sa ne se produit ne serait-ce qu'une fois, j'aurais un décalage entre mon nombre de message réel et celui incrémenter).

    Comment vous gèreriez ceci ?
    Merci d'avance.

    Olivier

    Nota: J'ai penser lancer quelque fois une requete qui recalcule mais je pense que se serait contourner le problème.

  2. #2
    Membre actif Avatar de greg91
    Homme Profil pro
    Administrateur système
    Inscrit en
    Novembre 2007
    Messages
    121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur système

    Informations forums :
    Inscription : Novembre 2007
    Messages : 121
    Points : 208
    Points
    208
    Par défaut
    Je trouve l’idée pas mauvaise. C'est une sorte de cache en DB juste pour le nombre de ligne d'une table (Peut être qu'un cache pourrai le faire automatiquement).

    Je ne voie pas pourquoi ta requête UPDATE buggerai si elle est correctement effectuée. A ce moment là, on pourrais tout remettre en cause.

    Pense par contre à décrémenter le compteur quand un post est supprimé

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Pour que se soit optimiser, au lieu de compter à chaque fois à l'aide d'une requête le nombre de message dans une catégorie et l'afficher, je souhaitais mettre un champ "nbMessage" dans ma catégorie et quand une personne ajoute un poste, incrémenter mon nombre de message.
    Ce que tu veux implémenter ici s'appelle un usage. Dans les bases de données relationnelles, les usages caractérisent un type particulier de données qui peuvent être calculées mais qui sont volontairement mises sous formes d'attributs afin d'optimiser les performances.

    Dans ton cas, l'optimisation sera pauvre j'en ai peur, la fonction count est extrêmement rapide vu que les moteurs de stockage gardent un compteur en mémoire. Du coup tu perdra plus de temps avec tes updates que tu ne vas en gagner sur les select, le jeu n'en vaut pas la chandelle.

    L'optimisation concerne plus généralement les tables et les index.

    Comment vous gèreriez ceci ?
    Je commencerai par la conception des tables, tu trouvera sur developpez tout un tas de tutoriaux sur merise ou UML suivant la méthode de conception que tu utilise. Si ton projet n'est pas vraiment complexe, tu peux te dispenser d'utiliser une telle méthode et le faire "au feeling" mais gare !

    Je te recommande d'utiliser MySQL Workbench pour la création de ton modèle de données: http://dev.mysql.com/downloads/workbench/

    Pour ce qui est de l'implémentation: je te suggère fortement d'utiliser des tables InnoDB, ce moteur supporte les transactions et les clés étrangères qui tout deux garantissent (s'ils sont utilisés correctement bien sûr) l'intégrité des données du modèle, ce qui est clairement mandataire dans le cadre d'un forum.

    Pour ce qui est de PHP: je te recommande fortement d'utiliser PDO et les requêtes préparées, là encore, il y a pléthore de tutoriaux sur le site. Les requêtes préparées permettront plus de sécurité et de rapidité.

    Note: Plutôt que de ré-ré-réinventer la roue, tu devrais utiliser un CMS de type Forum comme PHPBB.

  4. #4
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    Note: Plutôt que de ré-ré-réinventer la roue, tu devrais utiliser un CMS de type Forum comme PHPBB.
    Il a dit un forum simple et optimisé


    regarde plutôt du coté de PunBB ou FluxBB (en français)

    http://fluxbb.fr/forums/index.php

  5. #5
    Membre habitué
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par greg91 Voir le message
    Je trouve l’idée pas mauvaise. C'est une sorte de cache en DB juste pour le nombre de ligne d'une table (Peut être qu'un cache pourrai le faire automatiquement).

    Je ne voie pas pourquoi ta requête UPDATE buggerai si elle est correctement effectuée. A ce moment là, on pourrais tout remettre en cause.

    Pense par contre à décrémenter le compteur quand un post est supprimé
    Le problème récurent est que lorsque un développeur repasse derrière, il ne pense pas à tout et la mise à jour de ce compteur passe à la trappe. De même pour toi si tu reviens plusieurs moi après.

    Plus la logique est dans la base de données plus ça t'évite de te tenir à jour tes infos coté logiciel et de risquer de créer des bug, tu y gagnera en temps et des erreurs en moins.

    quand ton forum aura plusieurs milliers de visiteurs par heure et que ta base de données sera saturé tu pourras reconsidérer ce msg, mais en attendant met le plus de logique au niveau de ta base données.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 72
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Merci de vos réponses. J'ai déjà pensé à l'utilisation de forum déjà tout prêt tel que PhpBB et les autres. Le soucis que je trouve dans ces forums c'est que :
    - il nécessite une seconde inscription pour marcher (encore qu'on peut les lier avec son propre site mais il faut du coup utiliser les fonctions de PhpBB et le site deviens pénible à coder pour faire ses propres ajouts).
    - ils ne permettent pas être intégré dans mon site (ce qui m'intéresse en faite le plus).

    C'est pourquoi je comptais faire le mien avec les fonctionnalités de base.
    Je vais donc regarder autour de PDO pour optimiser tout ça.

    Merci.

  7. #7
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Je vais donc regarder autour de PDO pour optimiser tout ça.
    Optimise ton MDD, le choix du client et du driver n'a pas (ou peu) d'incidence sur la rapidité de tes requêtes.

Discussions similaires

  1. [MySQL] Demande aide optimisation requête SQL
    Par Dosix dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 07/07/2011, 09h13
  2. Demande aide sur requêtes SQL imbriquées
    Par pixworld2 dans le forum Requêtes
    Réponses: 5
    Dernier message: 24/12/2010, 16h23
  3. Réponses: 2
    Dernier message: 28/05/2008, 12h17
  4. Besoin d'infos pour une requête SQL
    Par jeanmarc1234 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 07/03/2008, 18h47
  5. Demande saisie dans une requête SQL !!
    Par Shakan972 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 27/03/2006, 15h38

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