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 :

Aidez moi a trouver la bonne requete SQL s'il vous plait [MySQL-5.5]


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut Aidez moi a trouver la bonne requete SQL s'il vous plait
    Bonjour,

    je cherche une requete SQL mais n'étant pas un professionnel, je galére.
    je simplifie le problem, j'ai deux tables:

    Table "articles":
    -id: int
    -titre: text
    -contenu: text

    Table "votes":
    -id: int
    -id_article: int
    -vote: bool (true=aime, false=n'aime pas)

    Donc vous l'aurais compris, pour un article donné on peu avoir n votes positif comme negatif
    Pour afficher la liste des articles par ordre décroissant je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM articles ORDER BY id DESC
    ... peu importe

    Maintenant j'aimerais afficher la liste des articles par ordre de ceux qui ont le plus de votes positif
    (la liste de ceux qui ont le plus de vote negatif sera alors simple a déduire)
    Merci d'avance pour votre aide
    kertimanoff

  2. #2
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 802
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Articles classés par ordre décroissant de votes positifs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id_article, COUNT(*) AS nb_votes_positifs
    FROM votes
    WHERE vote = TRUE
    GROUP BY id_article
    ORDER BY nb_votes_positifs DESC

  3. #3
    Membre à l'essai
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Le problem avec ça c'est que je devrais faire une seconde requette pour selectionner mon titre et mon contenu, sa fera un truc du genre:
    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
     
    <?php
    $sql->query_ask("
    SELECT id_article, COUNT(*) AS nb_votes_positifs
    FROM votes
    WHERE vote = TRUE
    GROUP BY id_article
    ORDER BY nb_votes_positifs DESC");
    while($row = $sql->fetch_array()){
       $sql2->query_ask("SELECT titre, contenu FROM articles WHERE id=".$row['id_article']);
       while($row2 = $sql2->fetch_array()){
          //et seulement ici jaurais accé aux titre et contenu des articles classé en fct des votes
       }
    }
    ?>
    alors que je veux obtenir les titres et contenus deja classé en fonction des votes, en une seule requete. une idée ?

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2012
    Messages : 81
    Points : 89
    Points
    89
    Par défaut
    tout simplement avec ca je pense:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    SELECT v.id_article, a.titre, a.contenu,  COUNT(v.id_article) AS nb_votes_positifs
    FROM votes as v
    JOIN articles AS a ON a.id = v.id_article 
    WHERE v.vote = TRUE
    GROUP BY v.id_article
    ORDER BY nb_votes_positifs DESC

  5. #5
    Expert éminent sénior
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 802
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 802
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des valeurs aléatoires pour les colonnes manquantes.

    Voici la bonne requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT a.id AS id_article,
    	a.titre, a.contenu,
    	COUNT(*) AS nb_votes_positifs
    FROM articles a 
    INNER JOIN votes v ON v.id_article = a.id
    WHERE vote = TRUE
    GROUP BY a.id, a.titre, a.contenu
    ORDER BY nb_votes_positifs DESC

  6. #6
    Membre à l'essai
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    20
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2009
    Messages : 20
    Points : 13
    Points
    13
    Par défaut
    Génial merci CinePhil ça marche parfaitement

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

Discussions similaires

  1. Aidez moi a trouver l'erreur svp
    Par Layla dans le forum Langage
    Réponses: 2
    Dernier message: 18/06/2010, 11h40
  2. Réponses: 5
    Dernier message: 26/03/2009, 10h19
  3. Réponses: 2
    Dernier message: 21/06/2008, 12h01

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