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 :

Problème de boucle ou de MySql [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut Problème de boucle ou de MySql
    Bonjour,
    J'ai fait un petit script me permettant de prendre des articles dans une base de données et permettant de voir les sites qui utilisent ces articles.
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?
    include("haut_page.php");
    include ("variables.php");
    include ("connect.inc.php");
     
    echo "<u>Les articles dans les sites</u> : ";
    echo "<br><br>";
     
    $sql = "SELECT * FROM $table4 ORDER BY numero";
    $resultat = mysql_query($sql) or die(mysql_error());
    $n = mysql_num_rows($resultat);
    echo "Il y a ".$n." articles";
     
     
     
    $sql2 = "SELECT * FROM $table4 INNER JOIN $table6 ON $table4.numero=$table6.numero_article INNER JOIN $table ON $table6.numero_site=$table.numero ORDER BY $table4.numero";
    $resultat2 = mysql_query($sql2) or die(mysql_error());
    $n2 = mysql_num_rows($resultat2);
    echo " dont ".$n2." attachements";
    echo "<br><br>";
     
    while ($donnees = mysql_fetch_assoc($resultat)) {
    echo $donnees['titre']." : ";
     
    while ($donnees2 = mysql_fetch_assoc($resultat2)) {
    echo "<a href=\"".$donnees2['url']."\" target=\"_blank\">";
    echo $donnees2['site'];
    echo "</a>";
    echo " - ";
    }
     
    }
     
    echo "<br /><br />";
     
    include("bas_page.php");
    ?>

    Seul problème, cela m'affiche un premier article suivi de tous les sites et enfin les articles...
    Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Mon article : lesite1 - lesite2 - lesite3 - lesite1 - lesite1 - lesite3 - lesite4 - Mon deuxième article : Mon 3ème article : Mon quatrième article :
    Tout ça, je sais que c'est normal car j'ai fait deux boucles while... quand on rentre dans la première, ça prend le premier article mais desuite, on tombe sur la deuxieme boucle qui va faire afficher tous les sites... et enfin les articles arrivent...

    Or, moi, ce que je voudrais, c'est afficher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Mon article : lesite1 - lesite2 - lesite3 - lesite5 (tous les sites qui possèdent cet article)
    Mon deuxième article : lesite1 - lesite3 - lesite5
    Mon troisième article : lesite2 - lesite5
    ...

    Je n'arrive pas à savoir comment faire pour mettre un premier article suivi de tous les sites qui lui sont rattachés puis un autre article avec ses sites...
    Comment faire svp ?? Est-ce ma requête sql à modifier ??? ou bien ma boucle ??? comment dans ces cas-là utiliser deux boucles ??

    Merci d'avance...

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Si je mets un GROUP BY, cela permettra de mettre les bons sites attachés aux articles mais ça n'en mettra qu'un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql2 = "SELECT * FROM $table4 INNER JOIN $table6 ON $table4.numero=$table6.numero_article INNER JOIN $table ON $table6.numero_site=$table.numero GROUP BY $table4.titre ORDER BY $table4.numero";
    donnera :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Mon article : lesite1 - Mon deuxième article : lesite1 - Mon troisième article : lesite2 - Mon quatrième article : lesite5
    et pourtant, dans le troisième et quatrième article il devrait y avoir plusieurs articles... le group by n'en affiche qu'un, c'est normal... mais alors comment faire pour que ces deux boucles fonctionnent svp ?

  3. #3
    Membre habitué
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 150
    Points
    150
    Par défaut
    Bonjour,

    Votre code ne fonctionne pas car vous appelez tout vos articles, ensuite vous appelez tout vos sites.
    Et vous affichez tout vos articles et tout vos sites.

    Ce qu'il faudrait faire, c'est :
    -Appelez tout vos articles
    -Lancer la boucles while de vos articles
    -Appelez vos sites ayant pour référence l'article actuellement dans le while
    -Lancer la boucle while de vos sites
    -Stopez la boucle while de vos sites
    -Stoppez la boucle while de vos sites

    Je vais vous le faire avec votre code, en sachant que je ne connais pas le nom de vos tables donc il faudra le rédapter pour vous.


    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    <?
    include("haut_page.php");
    include ("variables.php");
    include ("connect.inc.php");
     
    echo "<u>Les articles dans les sites</u> : ";
    echo "<br><br>";
     
    $sql = "SELECT * FROM $table4 ORDER BY numero";
    $resultat = mysql_query($sql) or die(mysql_error());
    $n = mysql_num_rows($resultat);
    echo "Il y a ".$n." articles<br>";
     
     
     
    $sql2 = "SELECT * FROM $table4 INNER JOIN $table6 ON $table4.numero=$table6.numero_article INNER JOIN $table ON $table6.numero_site=$table.numero ORDER BY $table4.numero";
    $resultat2 = mysql_query($sql2) or die(mysql_error());
    $n2 = mysql_num_rows($resultat2);
     
     
    while ($donnees = mysql_fetch_assoc($resultat)) 
    {
    	echo $donnees['titre']." : ";
    	$sql2 = "SELECT * FROM $table4 INNER JOIN $table6 ON $table4.numero=$table6.numero_article INNER JOIN $table ON $table6.numero_site=$table.numero"; 
    	// Parties à modifier de votre côté.
    	$sql2 .= " WHERE [Table où vous stocker l'identifiant de l'article dans la table de vos sites]=".$donnees[Table contenant l identifiant de la table site]." ";
    	$sql2 .= "ORDER BY $table4.numero";
    	$resultat2 = mysql_query($sql2) or die(mysql_error());
    	$n2 = mysql_num_rows($resultat2);
    	while ($donnees2 = mysql_fetch_assoc($resultat2)) 
    	{
    		echo "<a href=\"".$donnees2['url']."\" target=\"_blank\">";
    		echo $donnees2['site'];
    		echo "</a>";
    		echo " - ";
    	}
    }
     
    echo "<br /><br />";
     
    include("bas_page.php");
    ?>

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    181
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 181
    Points : 78
    Points
    78
    Par défaut
    Bonjour,
    Je me suis inspiré de ce que vous m'avez dit et ça marche, merci beaucoup
    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    <?
    include("haut_page.php");
    include ("variables.php");
    include ("connect.inc.php");
     
    $sql = "SELECT * FROM $table4 ORDER BY numero";
    $resultat = mysql_query($sql) or die(mysql_error());
    $n = mysql_num_rows($resultat);
    echo "<font size=2><u>Les ".$n." articles sont int&eacute;gr&eacute;s dans les sites suivants</u> :</font>";
    echo "<br><br>";
     
    while ($donnees = mysql_fetch_array($resultat)) {
    $sql2 = "SELECT * FROM $table4 INNER JOIN $table6 ON $table4.numero=$table6.numero_article INNER JOIN $table ON $table6.numero_site=$table.numero WHERE $table4.titre='".$donnees['titre']."' ORDER BY $table4.numero,$table4.titre";
    $resultat2 = mysql_query($sql2) or die(mysql_error());
     
    echo "<font size=2><u><b>";
    echo $donnees['titre']."</b></u> :</font>";
    echo "<br />";
    echo "<center><table border=0>";
    while ($donnees2 = mysql_fetch_array($resultat2)) {
    echo "<tr><td align=left>";
    echo "<a href=\"".$donnees2['url']."\" target=\"_blank\">";
    echo $donnees2['site'];
    echo "</a>";
    echo "</td></tr>";
     
    }
    echo "</table></center>";
    echo "<br />";
    }
     
    echo "<br />";
     
    include("bas_page.php");
    ?>
    A bientôt et encore merci

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

Discussions similaires

  1. Problème avec boucle mysql
    Par Invité dans le forum Langage
    Réponses: 1
    Dernier message: 27/04/2013, 20h23
  2. [MySQL] problème de boucle mysql (xajax)
    Par artotal dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/08/2007, 00h44
  3. [Smarty] Problème de boucle MySQL sous Smarty
    Par slaxsystem dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 29/04/2007, 17h28
  4. Problème de boucles Php/mysql
    Par Atwight dans le forum Requêtes
    Réponses: 4
    Dernier message: 24/08/2006, 15h44
  5. Problème de connexion au serveur MYSQL
    Par ETOKA dans le forum Outils
    Réponses: 2
    Dernier message: 27/11/2003, 09h28

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