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 :

Problème de requête.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut Problème de requête.
    Bonjour à tous,

    Je suis actuellement bloqué, j'explique mon problème.

    Pour commencer voici mon code :

    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
    16
    17
     
     
    $StrSql2 = mysql_query( "SELECT * FROM `" . VIDEO_TABLE . "` ORDER BY date" );
    while( $membre = mysql_fetch_array( $StrSql2 ) )
    {
      $StrSql3 = mysql_query("SELECT `pseudo`, `avatar` FROM `" . USER_TABLE . "` WHERE `id` = '" . mysql_real_escape_string( $membre['auteur_id'] ) . "'");
      list( $mbr_pseudo, $mbr_avatar ) = mysql_fetch_array( $StrSql3 );
     
      $mbr_pseudo = htmlentities( $mbr_pseudo, ENT_QUOTES );
     
      $mbr_photo = ( empty( $mbr_avatar ) ) ? 'modules/User/noavatar.gif' : $mbr_avatar;
     
      ?>
      <img src="<?php echo $mbr_photo; ?>" alt="<?php echo $mbr_pseudo; ?>" width="72" height="72" />
      <?php
     
    }

    Donc enfaite ma requête fonctionne j'ai bien l'avatar des derniers membres qui ont ajouter une vidéo qui s'affiche.

    Le soucis c'est que un membre ayant poster par exemple 4 vidéo aura alors son avatar d'afficher 4 fois.

    Je voudrait alors faire en sorte qu'il n'y ait qu'une seul fois son avatar d'afficher.

    Comment je pourrait donc s'il vous plait empecher ceci .

  2. #2
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    dans ta table ".VIDEO_TABLE." tu as probablement une référence à l'utilisateur...

    Il faut utiliser GROUP BY
    admettons que le champ qui fait référence à l'utilisateur soit 'id_user', voici ce que ça donnera :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Ta requete de base
    $StrSql2 = mysql_query( "SELECT * FROM `" . VIDEO_TABLE . "` ORDER BY date" );
    
    // Apres transformation
    $StrSql2 = mysql_query( "SELECT * FROM `" . VIDEO_TABLE . "` GROUP BY id_user ORDER BY date" );

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    Mais bien sûr pffff je chercher beaucoup plus loin

    En tous cas merci bien sa fonctionne

  4. #4
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,
    " . VIDEO_TABLE . "
    Les variables en php doit être précédé d'un $.
    Mais si c'est déjà le nom de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $StrSql2 = mysql_query( "SELECT * FROM VIDEO_TABLE ORDER BY date" );
    Si c'est une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $StrSql2 = mysql_query( "SELECT * FROM " .$VIDEO_TABLE . " ORDER BY date" );
    Valable aussi pour
    $StrSql3 = mysql_query("SELECT `pseudo`, `avatar` FROM `" . USER_TABLE . "` WHERE `id` = '" . mysql_real_escape_string( $membre['auteur_id'] ) . "'");
    list( $mbr_pseudo, $mbr_avatar ) = mysql_fetch_array( $StrSql3 );

  5. #5
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    Bonjour,

    Les variables en php doit être précédé d'un $.
    Mais si c'est déjà le nom de la table:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $StrSql2 = mysql_query( "SELECT * FROM VIDEO_TABLE ORDER BY date" );
    Si c'est une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $StrSql2 = mysql_query( "SELECT * FROM " .$VIDEO_TABLE . " ORDER BY date" );
    Valable aussi pour
    et si c'est un define(), alors c'est bien écrit

    hum hum... si sa syntaxe était pas bonne PHP aurait crié, donc moi je dis qu'il a fait un define()

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    Oui c'est une constante ^^

  7. #7
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    Citation Envoyé par Lqncer Voir le message
    Oui c'est une constante ^^
    CQFD !

    Les define() c'est le bien ! (même si perso je me limite à définir le nom de la base et le prefix ^^)

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    J'ai encore un petit soucis, je voudrait ordonner ma requete car la enfaite dans l'affichage de ma requete tous est bon mais le membre ayany poster par exmple 4 video sa dernière vidéo est la premiere posté.

    Voici ce que j ai mit pour trier mais sa ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $StrSql2 = mysql_query( "SELECT *, count(auteur_id) as co FROM `" . VIDEO_TABLE . "` GROUP BY auteur_id ORDER BY date, co DESC" );
    Une solution ?

  9. #9
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    écrire
    ou écrire
    c'est écrire 2 fois la même chose (pour la date)

    essaye simplement :
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY date DESC, co DESC

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    Non sa fonctionne pas

    Le soucis c'est que sa n'ordonne pas le group

  11. #11
    Membre Expert Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 895
    Par défaut
    effectivement... le GROUP BY est en général uniquement utile à récupérer l'index sur le quel on groupe... donc il te faut une 2ieme boucle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $sql = "SELECT id_user FROM videos GROUP BY id_user";
    $q = mysql_query($sql);
    while ($r = mysql_fetch_assoc($q)) {
         $sql2 = "SELECT * FROM videos WHERE id_user = '".$r['id_user']."' ORDER BY date DESC";
         $q2 = mysql_query($sql2);
         while ($r2 = mysql_fetch_assoc($q2)) {
              echo "<p>Regardez la derniere vidéo de ".$r2['pseudo']."</p>";
         }
    }

  12. #12
    Membre habitué
    Inscrit en
    Juillet 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2009
    Messages : 9
    Par défaut
    C'étais presque sa ^^
    Sa fonctionne mais sans la deuxième boucle car sinon sa déroule le groupe et on a toute les donnée du groupe qui s'affiche

    Merci bien

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

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/08/2003, 15h32
  2. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  3. Problème de requètes concurentes
    Par Emmanuel.G dans le forum XMLRAD
    Réponses: 3
    Dernier message: 08/08/2003, 16h51
  4. Réponses: 2
    Dernier message: 16/07/2003, 14h40
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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