8798 sujets

Développement web côté serveur, CMS

Bonjour, j'aimerai pouvoir comparer l'égalité entre une de mes variables avec le résultat d'une requête mysql contenant toute une série de valeur si possible sans devoir stocker chaque résultat de la requête dans une variable pour chaque résultat.

Un petit exemple que j'espère explicite :

mysql_query = ("SELECT jour FROM jours_feries");

???

if ($maVariableAComparer = $ChaqueResultatDeMaRequeteUnParUn)
{
    ...
}else{
   ...
}


Je veux faire en sorte que si c'est TRUE rien que 1 fois sur toutes les valeurs, alors ça rentre dans la condition, et si ça renvoie FALSE pour toutes les valeurs ça va dans le else. Mais je ne vois pas trop comment faire.
Modifié par Biouzor (02 Jun 2009 - 14:53)
Hello,

pas sûr d'avoir bien compris mais pourquoi ne testes-tu pas ta variable directement dans la requête ?

Du genre :
"SELECT jour FROM jours_feries where jour = '$maVariableAComparer'"
Du coup soit mysql_num_rows est supérieur à 0, soit il est égal à 0...
Un if avec des or dedans, je doute que ça marche vu que l'on ne connait pas à l'avance le nombre de champs qu'on va récupérer par la requête, et mettre directement la variable dans la requête, ce n'est pas vraiment ce que je cherche, j'ai une variable, et je veux la comparer à toutes les valeurs récupérée avec ma requête, si elle est présente 1 fois, je vais faire telle action, si elle n'est pas présente, je ferai une autre action. Je ne veux pas récupérer les valeurs égales à ma requête. Je verrai plutôt la solution avec in_array() qui s'approche plus de ce que je recherche il me semble en tout cas Smiley smile . Mais comment s'en servir sans savoir le nombre de valeur récupérée ? Je vais chercher de mon côté, mais si vous trouvez une solution avant que je poste la mienne lorsque j'aurai trouver afin de comparer la meilleure solution, ça pourra m'aider à m'améliorer, merci en tout cas.
Tu peux faire quelque chose dans ce goût :

$sql = '
   SELECT
      GROUP_CONCAT( `jour` ) AS "jours"
   FROM
      `jours_feries`';

$res = mysql_query( $sql );

$dataJours = mysql_fetch_assoc( $res );

if ( in_array( $variableATester, explode( ',', $dataJours['jours'] ) ) ) {
   // ok
}
else {
   // ko
}
Biouzor a écrit :
vu que l'on ne connait pas à l'avance le nombre de champs qu'on va récupérer par la requête
Ben si : le champ jour. Ce qu'on ne connaît pas c'est le nombre de résultats. Smiley cligne

Biouzor a écrit :
et mettre directement la variable dans la requête, ce n'est pas vraiment ce que je cherche, j'ai une variable, et je veux la comparer à toutes les valeurs récupérée avec ma requête, si elle est présente 1 fois, je vais faire telle action, si elle n'est pas présente, je ferai une autre action.
Eh bien si tu n'as rien d'autre à faire avec les valeurs de jour récupérées c'est le plus simple... et si tu as un traitement à faire avec les valeurs de jour récupérées tu peux faire :
$sql = 'Select jour FROM jours_feries';
$result = mysql_query($sql);
$jours_feries = array();
while($row = mysql_fetch_row($result)) {
   $jours_feries[] = $row[0];
}
if(in_array($maVariableAComparer, $jours_feries)) {
   // traitement
} else {
   // autre traitement
}
Merci pour vos propositions, et j'ai finalement réussi à faire ce que je voulais avec la fonction in_array(). Et ma solution est très proche de ce que tu m'as proposé Heyoan. Merci à toi aussi Agylus même si je ne connais pas tout ce que tu utilises dans ta proposition mais ça ressemble également à ce que j'ai fait. (j'avais utilisé un exemple simplifié pour illustrer mon problème).
Biouzor a écrit :
Merci à toi aussi Agylus même si je ne connais pas tout ce que tu utilises dans ta proposition
Le GROUP_CONCAT ne renvoie qu'un seul enregistrement qui correspond à tous les résultats séparés par une virgule. Du coup explode retransforme cela en tableau dans le test.