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 :

Imbrication de WHILE avec conditions [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 34
    Points
    34
    Par défaut Imbrication de WHILE avec conditions
    Bonjour,

    Je rencontres pas mal de difficultés avec une requete complexe que je n'arrive finalement pas à mettre sur pied.

    4 tables dans la base:
    USERS - SPORTS - LEAGUES - DISCUSSIONS

    C'est une sorte de blog sur le sport, ou chaque personne a son blog.
    Je bloque sur la dernière etape, que jai gardé pour la fin. C'est a dire deux requetes while imbriquées.

    Ce que j'aimerais faire: Comme Wordpress en somme, c'est a dire un menu avec les SPORTS et LEAGUES ou ne s'affiche que les sports et leagues ou l'utilisateur a posté.

    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
      <?php
      $sqluc6 = 'SELECT * FROM discu,sports,users WHERE sports.sid = discu.spid AND tips.uid = users.id AND users.id = "4"';
      $requc6 = mysql_query($sqluc6) or die('Erreur SQL !<br>'.$sqluc6.'<br>'.mysql_error());
     
     
      while ($datau6 = mysql_fetch_assoc($requc6))
      {
        $sqluc7 = 'SELECT * FROM leagues WHERE spid = "'.$datau6['sid'].'"';
      $requc7 = mysql_query($sqluc7) or die('Erreur SQL !<br>'.$sqluc7.'<br>'.mysql_error());
      echo ''.$datau6['sport'].'<br />';
      while ($datau7 = mysql_fetch_assoc($requc7))
      { echo ''.$datau7['league'].'<br />';}
      }
      ?>
    LEAGUES depend de SPORTS. Disons que LEAGUES sont les sous-categories de SPORTS.
    Mon problème c'est qu'il va afficher le menu avec plusieurs fois le même sport.
    Si l'utilisateur a posté un sujet sur le tennis deux fois de suite puis ensuite deux autres sujets sur le football, j'aurais dans le menu "Tennis Tennis Football Football" avec les LEAGUES en relation.

    Je ne vois pas comment formuler en php pour que les SPORTS et LEAGUES en relation ne s'affichent que si la personne a posté un sujet ou plusieurs. Et comment faire pour qu'un SPORT ne s'affiche qu'une fois dans le menu même si le user a posté plusieurs sujets sur ce même sport.

    Avez-vous une idée ?

    Bien cordialement.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 206
    Points : 87
    Points
    87
    Par défaut
    Bonjour,

    Dans quelle table insères-tu un sujet de l'utilisateur (table discution ?)?

    Est ce que dans cette table, tu stocke aussi l'id de ton utilisateur ?

    Tu peux tenter ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sqluc6 = 'SELECT * FROM discu,sports,users WHERE sports.sid = discu.spid AND tips.uid = users.id AND users.id = "4"' group by (tips.uid);

  3. #3
    Membre expert
    Avatar de trotters213
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 571
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Gard (Languedoc Roussillon)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 571
    Points : 3 145
    Points
    3 145
    Par défaut

    quelques remarques :
    - les jointures c'est dans le FROM et pas dans le WHERE
    - énonce tous tes champs au lieu d'utiliser * dans le SELECT
    - les champs de caractères doivent être encadrés de simple quote et non pas de double quote
    - sort d'où la table tips ????? (du coup dans ma requête j'ai laissé cette jointure bizarre dans le WHERE)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sqluc6 = "SELECT mets_la_liste_des_champs
    FROM discu d INNER JOIN sports s ON d.spid=s.sid, users u ON  WHERE tips.uid = users.id 
          AND users.id = '4' 
    GROUP BY tips.uid;";

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 33
    Points : 34
    Points
    34
    Par défaut
    Merci pour vos précisions.

    En effet, j'ai appris quelques trucs grâce à vos conseils.

    En modifiant les requêtes j'ai finalement réussis avec le INNER JOIN et le GROUP BY à mettre tout ca en place.

    Merci encore.

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

Discussions similaires

  1. Boucle While avec nombre variable de conditions
    Par jazzybluesy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/09/2012, 19h05
  2. [MySQL] Imbrication boucles while avec mysql_fetch_row
    Par whoaloic dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/02/2011, 15h25
  3. Boucle while avec 2 conditions OU
    Par loonis dans le forum Prolog
    Réponses: 4
    Dernier message: 25/05/2009, 22h05
  4. Boucle do while avec des conditions multiples
    Par UrSuS AmErIcAnUs dans le forum C
    Réponses: 4
    Dernier message: 19/06/2008, 16h13
  5. Faire un while avec condition d'arrêt une durée
    Par schumi101 dans le forum Linux
    Réponses: 3
    Dernier message: 16/06/2006, 12h31

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