Deux while en alternance dans un while

xxiv Messages postés 29 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 4 novembre 2010 - 6 mai 2009 à 10:41
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 - 8 mai 2009 à 12:00
[auteur/XXIV/1476343.aspx

]




[auteur/XXIV/1476343.aspx xxiv]












Bonjour à tous,
Voilà le code qui suit, permet d'afficher des outils pédagogiques venant de deux banques de données.
Ce
que j'aimerais c'est que le résultat de l'une puis de l'autre s'affiche
et ainsi de suite jusqu'à ce qu'il n'y ai plus de résultat à afficher.
Pour le moment il affiche bien tout les résultat mais d'une banque de donnée puis tout ceux de l'autre, sans alternance.
Si
vous pouviez me donner un petit coup de pouce, sans pour autant donner
une réponse complète, vous me seriez d'une grande aide.
Merci d'avance

$number = $number_enviro + $number_rid;
echo
" $number outils péda ont été trouvé.
$number_rid sur RID et
$number_enviro sur ENVIRO ";
echo "\";
$r =0;
$e= 0;
while ( $r+$e < $number )
{

//Affichage Outils FROM Rid
while ( $voir = mysql_fetch_array($sql_rid_result))
{
    $id_rid = $voir[0];
     $titre_rid = $voir[1];
     
echo \" * : $titre_rid

Auteurs : FROM RID

Type de support :

Approche:

Thèmes :

Publics :

\";
$r++;
}
//Affichage outils FROM ENVIRO
while ( $voir2 = mysql_fetch_array($sql_enviro_result) )
{
    $id_enviro = $voir2[0];
     $titre_enviro = $voir2[1];
     
echo \" * : $titre_enviro

Auteurs : FROM Enviro

Type de support :

Approche:

Thèmes :

Publics :

\";
$e++;
}
};
echo "
";

ps: je suis là si il vous manque des informations pour répondre.

8 réponses

faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
6 mai 2009 à 10:46
Bonjour,

Tu ne fais pas l'affichage de suite dans le while.
Tu récupères les données, tu les tries et range dans un seul tableau et tu affiches après.
-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 mai 2009 à 10:59
Salut,

On ne voit pas l'intégralité de tes requêtes, mais pourquoi ne pas les grouper en 1 seule ?
Du style :
SELECT ENVIRO.outils, Rid.outil FROM ENVIRO, Rid

Tu pourrais ainsi parvenir à tes fins avec 1 seule boucle while

Cordialement,

Kohntark -
0
xxiv Messages postés 29 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 4 novembre 2010
6 mai 2009 à 11:14
//For Faiblard

Je ne maitrise pas vraiment les array, mais petite question si je met tout dans un tableau et que je le re sort par après dans le while.
Si je fais un echo venant de la Base1 et de la Base2, que va t'il se passer si il n'y a pas le même nombre de résultats venant de l'une et de l'autre?
La boucle va s'arrêter? Ou je vais avoir des résultats avec les variables vide?

echo "<dt>
$titre_rid
</dt>
<dd>

Auteurs : FROM RID

Type de support :

Approche:

Thèmes :

Publics :

</dd>
 <dt>
?&amp;media_id=$id_enviro'>$titre_enviro
</dt>
<dd>

Auteurs : FROM Enviro

Type de support :

Approche:

Thèmes :

Publics :

</dd>";

//For Kohntark
voilà la première partie du scripte.
Sinon pour tout faire en une je ne vois pas trop comment faire, vu que les deux bases son physiquement distante.
Et qu'elle ne sont pas tout à fais identiques au niveau de leur construction?

//Déclaration variables Envirodoc
$_SESSION['theme_enviro'] = $t_enviro;
$_SESSION['public_enviro'] = $p_enviro;
$_SESSION['approche_enviro'] = $ap_enviro;
$_SESSION['support_enviro'] = $s_enviro;
//Déclaration variables Réseau-idée
$_SESSION['theme_rid'] = $t_rid;
$_SESSION['public_rid'] = $p_rid;
$_SESSION['approche_rid'] = $ap_rid;
$_SESSION['support_rid'] = $s_rid;
//Déclaration variable commune
$_SESSION['keyword'] = $keyword;
$_SESSION['ok'] = 1;

//Début du test d'existance des variables pour RID et création de la requête par concaténation//
rid_connect();
$sql_rid= 'SELECT DISTINCT m.media_id, m.media_name FROM media AS m ';
if (isset($_SESSION['theme_rid'])&&($_SESSION['theme_rid'])!="") 
   {      $sql_rid .' INNER JOIN media_theme mth ON mth.media_id m.media_id';
   }

if (isset($_SESSION['public_rid'])&&($_SESSION['public_rid'])!="") 
   {      $sql_rid .' INNER JOIN media_public mpu ON mpu.media_id m.media_id ';
   }
  
if (isset($_SESSION['approche_rid'])&&($_SESSION['approche_rid'])!="") 
   {      $sql_rid .' INNER JOIN media_media_type map ON map.media_id m.media_id ';
   }
  
if (isset($_SESSION['support_rid'])&&($_SESSION['support_rid'])!="") 
   {      $sql_rid .' INNER JOIN media_support msup ON msup.media_id m.media_id '; }

if (0<1)
    {
    $sql_rid .= ' WHERE m.val_state=15728640';
    }
if (isset($_SESSION['theme_rid'])&&($_SESSION['theme_rid'])!="") 
   {
     $sql_rid .= ' AND  mth.theme_id="'.$_SESSION['theme_rid'].'"';
   }

if (isset($_SESSION['titre'])&&($_SESSION['titre'])!="") 
   {
     $sql_rid .= ' AND  m.media_nom LIKE "'.$_SESSION['titre'].'"';
   }

if (isset($_SESSION['public_rid'])&&($_SESSION['public_rid'])!="") 
   {
     $sql_rid .= ' AND  mpu.public_id="'.$_SESSION['public_rid'].'"';
   }
  
if (isset($_SESSION['approche_rid'])&&($_SESSION['approche_rid'])!="") 
   {
     $sql_rid .= ' AND  map.media_type_id="'.$_SESSION['approche_rid'].'"';
   }
  
if (isset($_SESSION['support_rid'])&&($_SESSION['support_rid'])!="") 
   {
     $sql_rid .= ' AND  msup.type_id="'.$_SESSION['support_rid'].'"';
   }

if (isset($_SESSION['keyword'])&&($_SESSION['keyword'])!="")
{
$ar='SELECT DISTINCT keyword_id FROM keyword WHERE keyword_nom_search like "'.$_SESSION['keyword'].'"';

$result_ar = mysql_query($ar);

while ( $voir = mysql_fetch_row($result_ar )){
    echo $aIdsr[] = $voir[0];
};

$br="SELECT DISTINCT media_id FROM media_keyword WHERE keyword_id in (".implode(',', $aIdsr).")";

$result_br = mysql_query($br);

while ( $voir = mysql_fetch_row($result_br )){
    echo $bIdsr[] = $voir[0];
};

     $sql_rid .= " AND media_id in (".implode(',', $bIdsr).")";

}

if (0<1)
    {
    $sql_rid .= ' ORDER BY m.media_name';
    }
//FIN du test d'existance des variables pour RID et création de la requête par concaténation//
$sql_rid_result = mysql_query($sql_rid);
$number_rid = mysql_num_rows($sql_rid_result);

//Début du test d'existance des variables pour ENVIRO et création de la requête par concaténation//

enviro_connect();
$sql_enviro= 'SELECT DISTINCT m.media_id, m.media_nom FROM media AS m ';
if (isset($_SESSION['theme_enviro'])&&($_SESSION['theme_enviro'])!="") 
   {      $sql_enviro .' INNER JOIN media_theme mth ON mth.media_id m.media_id';
   }

if (isset($_SESSION['public_enviro'])&&($_SESSION['public_enviro'])!="") 
   {      $sql_enviro .' INNER JOIN media_public mpu ON mpu.media_id m.media_id ';
   }
  
if (isset($_SESSION['approche_enviro'])&&($_SESSION['approche_enviro'])!="") 
   {      $sql_enviro .' INNER JOIN media_media_type map ON map.media_id m.media_id ';
   }
  
if (isset($_SESSION['support_enviro'])&&($_SESSION['support_enviro'])!="") 
   {      $sql_enviro .' INNER JOIN media_support msup ON msup.media_id m.media_id '; }

if (0<1)
    {
    $sql_enviro .= ' WHERE m.val_state=100 AND outil_peda_id =0';
    }
if (isset($_SESSION['theme_enviro'])&&($_SESSION['theme_enviro'])!="") 
   {
     $sql_enviro .= ' AND  mth.theme_id="'.$_SESSION['theme_enviro'].'"';
   }

if (isset($_SESSION['titre'])&&($_SESSION['titre'])!="") 
   {
     $sql_enviro .= ' AND  m.media_nom LIKE "'.$_SESSION['titre'].'"';
   }

if (isset($_SESSION['public_enviro'])&&($_SESSION['public_enviro'])!="") 
   {
     $sql_enviro .= ' AND  mpu.public_id="'.$_SESSION['public_enviro'].'"';
   }
  
if (isset($_SESSION['approche_enviro'])&&($_SESSION['approche_enviro'])!="") 
   {
     $sql_enviro .= ' AND  map.media_type_id="'.$_SESSION['approche_enviro'].'"';
   }
  
if (isset($_SESSION['support_enviro'])&&($_SESSION['support_enviro'])!="") 
   {
     $sql_enviro .= ' AND  msup.type_id="'.$_SESSION['support_enviro'].'"';
   }

if (isset($_SESSION['keyword'])&&($_SESSION['keyword'])!="")
{
$ae='SELECT DISTINCT keyword_id FROM keyword WHERE keyword_nom_search like "'.$_SESSION['keyword'].'"';

$result_ae = mysql_query($ae);

while ( $voir = mysql_fetch_row($result_a )){
    echo $aIdse[] = $voir[0];
};

$be="SELECT DISTINCT media_id FROM media_keyword WHERE keyword_id in (".implode(',', $aIdse).")";

$result_be = mysql_query($be);

while ( $voir = mysql_fetch_row($result_be )){
    echo $bIdse[] = $voir[0];
}
    $sql_enviro .= " AND media_id in (".implode(',', $bIdse).")";
}

if (0<1)
    {
    $sql_enviro .= ' ORDER BY m.media_nom';
    }
//FIN du test d'existance des variables pour ENVIRO et création de la requête par concaténation//
$sql_enviro_result = mysql_query($sql_enviro);
$number_enviro = mysql_num_rows($sql_enviro_result);
0
faiblard Messages postés 337 Date d'inscription samedi 3 février 2007 Statut Membre Dernière intervention 4 janvier 2011
6 mai 2009 à 11:55
Tu n'es pas habitué au tableau... commence donc a approfondir t'es connaissances dessus car c'est une chose indispensable...

Le plus simple :

while n° 1 ( ...)
{
    //tu stock dans un premier tableau
}

puis

while n° 2 ( ...)
{

    //tu stock dans un second tableau

}

ensuit tu fait un for pour remplir un troisieme tableau avec tes deux premier...

et tu d'aide de phpnet pour les fonctions à utiliser
http://fr3.php.net/manual/fr/ref.array.php
-------------------------------------------------------------------
La recherche est ton amie ! Promis elle ne te mordra pas...
Enjoy
N'oubliez pas d'accepter pour aidez les autres quand ils cherchent !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
6 mai 2009 à 12:12
Je n'ai pas pris le temps de décrypter des masses le code

Puisqu'il s'agit de 2 bases distantes il faut oublier ma proposition.

L'idéal serait de ne faire qu'un seul tableau multidimensionnel basé sur un index commun aux deux résultats.
$res = array(
[db1]=> array([resultat1]=>array([0]=>'jbkj'), [resultat2]=>array([0]=>'jbkb'), etc ...),
[db2]=> array([resultat1]=>array([0]=>'jaa'), [resultat2]=>array([0]=>'arb', [1]=>'po'), etc ...)
);

Un simple foreach fera l'affaire pour l'affichage.

Quel est l'élément commun aux 2 bases ?

J'adore ton if(0<1)   il sert à quoi au juste si ce n'est à rien ?

Cordialement,

Kohntark -
0
xxiv Messages postés 29 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 4 novembre 2010
6 mai 2009 à 15:19
ok merci

le if(0<1) c'est juste pour que order by et le where s'affiche toujours même si tout les champs du formulaire reste vide.

sinon l'élément commun c'est le media_id et media_nom.
La table media est quasiment identique d'une base à l'autre au niveau des champs, il y en a un ou deux qui change.
Mais les données sont différentes. Il peut y a avoir des id commun au deux tables sans qu'il ne parle du même sujet.

Sinon connais tu un bon site où l'on traitre du tableau multidimensionnel basé sur un index commun?

Encore merci

XxIv
0
xxiv Messages postés 29 Date d'inscription mardi 16 septembre 2008 Statut Membre Dernière intervention 4 novembre 2010
8 mai 2009 à 11:35
Je n'arrive pas à comprendre la structure.
j'ai un message d'erreur

Parse error: syntax error, unexpected '[', expecting ')'

$result = array(
[rid]=>array([ID]=>array([0]=>$sql_rid), [titre]=>array([1]=>$sql_rid)),
[env]=>array([ID]=>([0]=>$sql_enviro), [titre]=>([1]=>$sql_enviro))
);

Si vous saviez me donner un petit coup de pouce = )
0
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
8 mai 2009 à 12:00
Ce que je te donnais n'était pas du code valide mais un affichage du résultat qu'il faudrait obtenir.

Tu devrais commencer par te documenter sur les tableaux en PHP et a bien les assimiler (c'est la base) :
http://fr2.php.net/manual/fr/language.types.array.php
http://fr2.php.net/manual/fr/book.array.php

Cordialement,

Kohntark -
0
Rejoignez-nous