Dans une première requête, je selectionne un certains nombre d’enregistrement dans ma BD.
Là tu récupère UNE ligne à chaque requête.
Le résultat de cette requête est déclaré en tant que tableau.
Tableau associatif, oui puisque tu utilises mysql_fetch_assoc().
$query1 = « SELECT Item1,Item2,Item3 FROM MaTable1”;
$result = mysql_query($query1);
$resultat = mysql_fetch_array($result);
Une seule ligne sera récupérée, et quelque soit le nombre de lignes que tu testera mysql te renverra toujours un certain nombre de lignes mais tu n'en utilisera qu'une.
Je m’intéresse ensuite aux différentes valeurs de Item1 dans le tableau $resultat.
Lesquelles ? il n'y en aura qu'une à chaque fois ! et tout le temps la même.
Admettons que la première requête me donne 3 enregistrements (donc 3 valeurs de Item1).
mwé
Je souhaite, dans une deuxième requête, passer une à une les 3 valeurs de Item1 pour voir si 1 des 3 passages me donne au moins un enregistrement.
??? où est l'utilité ? SQL permet de savoir si le champs est vide ou pas:
Je dois, à la suite de la deuxième requête avoir un « témoin » m’indiquant si les 3 test me donnent au moins un résultat, ou bien rien du tout.
totalement inutile.
J’ai donc bricolé la suite de mon code avec un foreach, puis un test dont je sors( break) dès qu’une valeur est retournée. Mais cela ne me donne pas satisfaction :
normal

(que ça ne donne pas satisfaction)
foreach($resultat7 as $val)
{
$query2 = "SELECT Champs1, champs2, Champs3 FROM MaTable2 WHERE Champs1 = ‘”.CritèreItem1.”’”;
$result2 = mysql_query($query2);
$resultat2 = mysql_fetch_array($result2);
if(!empty($resultat2['Champs1s']))
{$zzz = "A";
break;
}
else
{
$zzz = "B";
}
}
Je pense que ma solution est très alambiquée et qu’il doit y avoir bien plus simple.
Pourrez-vous me donner votre avis ?
Merci d'avance.
En fait je n'ai pas tout compris ...
Que cherches tu à faire ?
S'il s'agit de récupérer trois valeurs différentes de item1 tu peux le faire ainsi :
Code : Tout sélectionner
SELECT distinct(item1) FROM matable WHERE item1 is not null ORDER BY Rand() LIMIT 0,3
Tout dépend maintenant de ta version de MySQL.
S'il s'agit d'une version antérieure à la 4.1 effectivement il faut passer par du code (quoique ça puisse être jouable avec des jointures). Sinon tu peux utiliser les requêtes imbriquées :
Code : Tout sélectionner
SELECT champs1,champs2,champs3 FROM matable2 WHERE champs1 in ( SELECT distinct(item1) FROM matable WHERE item1 IS NOT NULL);
Si tu dois passer par le code :
Code : Tout sélectionner
$flag = false;
while($ligne = mysql_fetch_assoc($res))
{
$champs1 = $ligne["champs1"];
$req2 = "SELECT champs1,champs2,champs3 FROM matable2 WHERE champs1='" . $champs1. "'";
$res2 = mysql_query($req2);
if (mysql_num_rows($res2) > 0)
{
$flag[$champs1] = true;
}
}
Tu sauras alors quels $champs1 correspondent à des données dans matable2.
Pour finir tes noms de variables n'aident pas vraiment à compréhension...