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

Requêtes MySQL Discussion :

Mélange de colonnes et Count


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut Mélange de colonnes et Count
    Bonjour,

    J'ai une question un peu bête, j'ai 3 Tables, une avec des contenus, une autre avec des votes/contenu/user, et mes users

    Le but est d'avoir une table pour les infos des contenus, une pour les users, et une qui recense tout sur s'ils ont voté ou pas pour un contenu (avec date, etc.)


    je me demandais si dans ma table contenus, je pouvais avoir un champ "nb_votes" qui serait un COUNT de ma table de vote avec un WHERE sur l'contenu_id ?

    Si c'est possible : YEah, comment faire?
    Si ca n'est pas possible :
    Est-ce un problème de conception? Si oui => qu'envisagez-vous pour que ca reste propre?
    Dois-je inclure un compteur sur mon contenu et utiliser un TRIGGERS/cron/requete en même temps pour le mettre à jour?

    Voili voilou
    Je sais que c'est une bête optimisation qui se résoud avec une requete pour incrémenter le compteur si l'utilisateur vote pour, ou diminuer s'il "n'aime plus". Mais je parfois je me dis que si ma base n'est pas propre, je n'en dors pas ^^

    Merci encore si ca vous dit quelque chose.

    Paul

  2. #2
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    À priori, c'est possible, mais il serait plus simple de vous aider si nous avions en notre possession la structure de vos tables et un jeu d'essai (CREATE TABLE et INSERT INTO). Si possible, savoir ce que vous voulez obtenir via la requête en fonction du jeu d'essai serait très apprécié (pour éviter de donner des requêtes qui ne correspondent pas à ce que vous voulez).

    Par contre, je crois que vous vous (et nous !) emmêlez un peu avec le choix de certains mots. Une table contient des colonnes, et non des champs. Ensuite, vous dites que le but est "d'avoir une table pour les infos [...]". Voulez-vous une requête, qui retourne un jeu de résultat (result set), ou voulez-vous modifier la structure de votre table (ce qui est le résultat, habituellement, d'une erreur de conception) ?

  3. #3
    Membre averti
    Profil pro
    Ingénieur développement logiciel
    Inscrit en
    Septembre 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur développement logiciel

    Informations forums :
    Inscription : Septembre 2007
    Messages : 28
    Par défaut
    J'ai joins de quoi créer la base avec les 3 tables et de quoi remplir un peu (je n'en étais qu'à la conception avec mysql-wordbench)

    Ma table "users" contient 2 utlisateurs.
    Un utilisateur a mis 1 contenu (table "contenus").
    Les 2 utilisateurs ont mis qu'ils l'aimaient (ca apparrait dans la table "vote")

    la table "contenu" contient un champs "nb_votes", qui résume le nombre de votes qu'elle a eu.
    Ma table vote a le qui a voté pour quoi à quel date (un vote/personne/contenu)

    Au final, on peut trouver combien il y a eu de votes pour un contenu en effectuant la requete suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(`user_id`) AS nb_votes  FROM `votes` WHERE `contenu_id` = 1
    Je me demandais si le champs "nb_votes" de ma table "contenus" pouvait automatiquement "être la requete", plutot que de devoir, lorsque j'insert ou enlève un vote, incrémenter ou décrémenter le compteur du contenu via un update.

    Ca parait sûrement bête , mais parfois niveau optimisations je me demande si certaines choses sont possibles.
    Après le cout de faire le COUNT n'est pas élevé, et même si c'est un alias, ca l'exécutera quand même finalement, de même pour les update, mais je me demandais s'il n'y avait pas des points clés du langage que je ne maitrisais pas là dessus, et que le SGBD n'effectuait pas ainsi une optimisation de ce type de requete.
    Je me demandais si le champs "nb_votes" de ma table "contenus" pouvait automatiquement "être la requete", plutot que de devoir, lorsque j'insert un vote, incrémenter le compteur du contenu via un update.
    Je dis ca car j'ai vu que l'on pouvait créer des vrais relations entre des tables via les foreign key pour les colonnes des identifiants, et donc je me demandais s'il existait quelque chose de similaire pour des alias entre des colonnes (pas "champs" effectivement excusez moi, je pense en tuple lorsque je fais mes tables ^^) et des fonctions

    C'est donc un peu plus qu'un simple result set. Après, j'ai continué de chercher des docs, et je suis tombé sur des views, mais je me demandais si cela se faisait de faire une view pour...un seul champs

    Voili voilà!
    Merci encore pour les conseils!!
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éclairé Avatar de Jihnn
    Inscrit en
    Décembre 2005
    Messages
    330
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 330
    Par défaut
    En fait, vous voulez mettre à jour votre table (incrémenter / décrémenter une colonne) à chaque fois qu'une donnée est ajoutée ou enlevée ?

    Dans ce cas, vous devez vous tournez vers les triggers.

Discussions similaires

  1. Count dans plusieurs colonne d'une même table
    Par macfleid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/07/2008, 20h43
  2. Réponses: 2
    Dernier message: 05/04/2008, 17h33
  3. Comment faire un count de colonnes null
    Par claralavraie dans le forum Langage SQL
    Réponses: 4
    Dernier message: 25/01/2006, 14h13
  4. Requête à plusieurs colonnes avec la fonction COUNT
    Par zigune dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/11/2004, 10h43
  5. Query sur plusieurs colonnes avec count(distinct...)
    Par Jeankiki dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/08/2004, 15h22

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