[SQL & PHP ] Mélange dans une requête
Résolu
JohnMystic
-
JohnMystic -
JohnMystic -
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 =)
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:
- [SQL & PHP ] Mélange dans une requête
- Easy php - Télécharger - Divers Web & Internet
- Expert php pinterest - Télécharger - Langages
- Logiciel sql - Télécharger - Bases de données
- Noir et rose melange - Forum Graphisme
- Jointure sql ✓ - Forum MySQL
2 réponses
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
// 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