WHERE 'champ'="variable à plusieurs valeurs ?"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : WHERE 'champ'="variable à plusieurs valeurs ?"

par moom » 16 août 2005, 17:41

Merci "Invité"

Comment remplacer les (id1, id2, id2) par mes différents valeurs $i
($case[$i] dans mon code initial)

Merci... là on revient à du php

par matt_m » 16 août 2005, 16:40

[moderation]
tu as vraiment l'impression que ton sujet c'est un probleme php?
merci de choisir le forum approprié la prochaine fois...
[/moderation]

par Invité » 16 août 2005, 15:49

En fait cela vient du fait que tu poses le pb a l'envers, il ne faut JAMAIS faire de connexion sql ni encore moins de requete sql dans une boucle, c'est du suicide. Il faut une seule requete avec un "group by" et des "in()" pour les criteres.

ensuite tu fait une boucle sur la liste de resultat, en affichant le type de vin (bourgogne...) que s'il est different du precedent, et tu aura bien ce que tu attends, avec des bonnes perfs

en esperant que cela t'aide...

par Invité » 16 août 2005, 15:45

non c'est bine un ORDER BY qu'il faut mettre si je veux ts les enregistrements répondant à "bourgogne" et pas seulement le 1er.

Mon pb ici est que
"SELECT * FROM caves WHERE codevin='".$case[$i]."' ORDER BY '".$ordered1."', '".$ordered2."', '".$ordered3."' "

ne renvoit qu'un seul enregistrement au lieux de ts les enregsitrements sélectionnés par le visiteur.

je voudrais faire un "WHERE codevin='"tous les enregistrements sélectionnés"'

Est-ce possible ?
il faut donc faire un "SELECT * FROM caves WHERE codevin in=(id1, id2, id2) ORDER BY '".$ordered1."', '".$ordered2."', '".$ordered3."' group by type_de_vin"
cela permet de renvoyer tous les vins dans les criteres voulus et classé par type de vin comme mis dans ton exemple.

par moom » 16 août 2005, 14:59

non c'est bine un ORDER BY qu'il faut mettre si je veux ts les enregistrements répondant à "bourgogne" et pas seulement le 1er.

Mon pb ici est que
"SELECT * FROM caves WHERE codevin='".$case[$i]."' ORDER BY '".$ordered1."', '".$ordered2."', '".$ordered3."' "

ne renvoit qu'un seul enregistrement au lieux de ts les enregsitrements sélectionnés par le visiteur.

je voudrais faire un "WHERE codevin='"tous les enregistrements sélectionnés"'

Est-ce possible ?

par Invité » 16 août 2005, 14:46

Il faut mettre un "group by" avec le nom du champs contenant 'BOURGOGNE'

WHERE 'champ'="variable à plusieurs valeurs ?"

par moom » 16 août 2005, 13:42

Bonjour à tous !

Je poursuis dans mes questions et difficultés...

Ma table : contient des vins
Page 1 : l'utilisateur définit ses paramètres d'affichage de sa cave
Page 2 : la cave s'affiche
Page 3 : la cave affiche uniquement les vins sélectionnés

Je voudrais afficher cette page 3 comme la page 2 c.a.d. afficher les vins (sélectionnés) selon un ordre (par exe. d'abord les bordeaux, ensuiite les bourgognes, etc.). Mon pb c'est que je n'arrive pas dans ma requête à lui dire "select * from caves WHERE codevin=" tous les vins sélectionnés". J'arrive simplement à faire "select * from caves WHERE codevin=" le 1er vin sélectionné" et après ++. Résultat : pour chaque vin il m'affiche la région, le millésime, etc. bref les critères d'affichage de tous les vins...

Petit exemple ce sera plus clair...

ce que je veux :

BOURGOGNE
- echezeaux
- beaune

BORDEAUX
- médoc
- graves

ce que j'ai :

BOURGOGNE
- echezeaux

BOURGOGNE
- beaune

BORDEAUX
- médoc

BORDEAUX
- graves


Le code de la page :
<?php
$nb_element = htmlentities($_POST['nb_element'],ENT_QUOTES);
$nb_element = (isset($_POST['nb_element']))?(int)$_POST['nb_element']:''; 
$case = Array();
for ($i=0;$i<$nb_element;$i++)
{
 $case[] = htmlentities($_POST['case'.$i]); //on mets tout dans un tableau
if (isset($case[$i])) //case0=1&egrave;re ligne case1=2nde ligne case2=3&egrave;me ligne case4=3&egrave;me ligne etc...
{
$db = mysql_connect('xx','xx','xx') or die('Erreur de connexion ');
mysql_select_db('xx') or die('Erreur de selection database ');
$requete = "SELECT * FROM caves WHERE codevin='".$case[$i]."' ORDER BY '".$ordered1."', '".$ordered2."', '".$ordered3."' "; 
$sql = mysql_query($requete) or die (mysql_error()); 

$critere1 = ''; 
while ($donnees = mysql_fetch_array($sql) ) { 
	// si $critere1 est vide : c'est le premier passage 
    // ou si $critere1 est différent du critere1 de la ligne 
    if (empty($critere1) OR $critere1 != $donnees[$ordered1])
	{ 
        // on affiche le critere1 
       echo '<br><br><p class="Style1"><u>'.$donnees[$ordered1].'</u></p>'; 
        // on stocke le nouveau 
       $critere1 = $donnees[$ordered1]; 
    } 
    if (empty($critere2) OR $critere2 != $donnees[$ordered2])
	{ 
        // on affiche le critere2 
       echo '<p class="Style3">'.$donnees[$ordered2].'<br>'; 
        // on stocke le nouveau
       $critere2 = $donnees[$ordered2]; 
    } 
	echo '<span class="Style6">'.$donnees[$crit1].' - '.$donnees[$crit2].' - '.$donnees[$crit3].' - </span><em><span class="Style7">'.$donnees[$crit4].'</em></span><br />'; 
    $critere2 = $donnees[$ordered2]; 
}
}
}
?> 
Merci !