[SQL & PHP ] Mélange dans une requête

Résolu/Fermé
JohnMystic - 28 mai 2009 à 11:21
 JohnMystic - 29 mai 2009 à 15:00
Bonjour,

J'ai un petit problème avec une requête et je ne sais pas trop comment le résoudre. En même temps je ne sais pas si ce que j'ai fais est possible.

Alors voici le contexte:

Un client recherche une carte en fonction de 4 critères. Une fois choisis ( ou pas ce n'est pas une obligation ) il clique sur 'soumettre'. La page envoie les informations sur une autre page en méthode GET.
Sur l'autre page je récupère les informations et ensuite je fais ma requête. Et c'est là que ça ce complique.

Donc d'abords je récupère les infos:

// On récupère l'indice de la langue si elle a été sélectionnée
if(isset ($_GET['lang'])) $langue=$_GET['lang'];
else $langue=0;

// On récupère l'indice du format s' il a été sélectionné
if(isset ($_GET['auto']) && $_GET['auto']!=-1 ) $format=$_GET['auto'];
else $format=0;

// On récupère l'indice de l'édition si elle a été sélectionnée
if(isset ($_GET['ext']) && $_GET['ext']!=-1 ) $edition=$_GET['ext'];
else $edition=0;

// On récupère l'indice de la couleur si elle a été sélectionnée
if(isset ($_GET['col'])) $couleur=$_GET['col'];
else $couleur=0;



Voici la tête de ma requête:

$requetefoil='
SELECT j.id_carte,j.titre_en,j.titre_fr,b.id_couleur,d.lib_extension,g.lib_lang,i.lib_etat,a.prix_vente,a.rabais

FROM t_produit a, t_couleur b, t_id_carte_id_couleur c, t_extension d, t_id_variation_id_declinaison_id_produit e, t_id_carte_extension_rarete_num_carte_chemin f,
t_lang g, t_declinaison h, t_etat i,t_carte j,t_id_carte_id_autorisation k

WHERE f.id_carte=j.id_carte
AND f.id_extension=d.id_extension
AND f.id_variation=e.id_variation
AND c.id_carte=f.id_carte
AND c.id_couleur=b.id_couleur
AND e.id_produit=a.id_produit
AND e.id_declinaison=h.id_declinaison
AND h.id_etat=i.id_etat
AND h.id_langue=g.id_lang
AND k.id_carte=f.id_carte
'if($langue!=0) {'
AND g.id_lang='.$langue.'
'}'
'if($edition!=0) {'
AND d.id_extension='.$edition.'
'}'
'if($format!=0) {'
AND k.id_autorisation='.$format.'
'}'
'if($couleur!=0) {'
AND c.id_couleur='.$couleur.'
'}'

AND a.prix_vente>0
AND h.foil=\'O\'
AND (a.quantite>0 OR a.VIRTUEL=\'O\')';



Comme vous l'aurez remarqué, il y a des trucs pas très net en plein milieu de la requête ( en gras ). En faite ce que je veux faire c'est en fonction du résultat d'une variable, rajouter une ligne dans la requête SQL. Bien sûr ce que j'ai fais là ne fonctionne pas. Et c'est pour ça que je suis là.

Si quelqu'un d'entre vous a une idée ou une autre solution je suis preneur =)
Merci d'avance à tous.

ENJOY =)
A voir également:

2 réponses

Ozimandias Messages postés 502 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 10 mars 2010 46
28 mai 2009 à 17:33
Je vais simplifier ta requete pour eviter d'avoir 2000 lignes... En php pour coller(concaténer en language de programmation) 2 chaines de caractères on utilise le point. ça donne:

// La je vire pas mal de choses pour que se soit plus clair

$requetefoil= 'SELECT a.rabais FROM t_produit a WHERE f.id_carte=j.id_carte
AND f.id_variation=e.id_variation';

j'ai fini la chaine de caractère mais avec $requetefoil .= je vais lui rajouter la suite:


if($langue!=0) {
$requetefoil .= 'AND g.id_lang='.$langue;}

A ce moment là , $requetefoil contient : SELECT a.rabais FROM t_produit a WHERE f.id_carte=j.id_carte
AND f.id_variation=e.id_variation AND g.id_lang='.$langue
1
Oui hier j'ai réussi à trouver.
Et j'ai justement fais comme toi.

Merci pour le coup de main =)
0