Rechercher : dans
Par :

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

Dernière réponse le 29 mai 2009 à 15:00:40 JohnMystic, le 28 mai 2009 à 11:21:06 
 Signaler ce message aux modérateurs

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 =)

Configuration: Windows Vista
Firefox 3.0.10

Meilleures réponses pour « [SQL & PHP ] Mélange dans une requête » dans :
SQL - éviter les doublons dans un SELECT VoirProblème Comment éviter les doublons dans les résultats d'une requête SQL ? Solution Il suffit d'utiliser la clause DISTINCT entre SELECT et les champs. Exemple : SELECT distinct id,nom,prenom FROM matable Plus d'informations ...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Le langage SQL VoirQu'appelle-t-on SQL? SQL (Structured Query Language, traduisez Langage de requêtes structuré) est un langage de définition de données (LDD, ou en anglais DDL Data Definition Language), un langage de manipulation de données (LMD, ou en anglais DML,...
SQL - Commande SELECT VoirLe langage de manipulation de données Le SQL est à la fois un langage de manipulation de données et un langage de définition de données. Toutefois, la définition de données est l'oeuvre de l'administrateur de la base de données, c'est pourquoi la...

1

Ozimandias, le 28 mai 2009 à 17:33:44
  • +1

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
Deux intellectuels assis vont moins loin qu'une brute qui ma­rche.
Citations de Michel Audiard

Répondre à Ozimandias

2

 JohnMystic, le 29 mai 2009 à 15:00:40

Oui hier j'ai réussi à trouver.
Et j'ai justement fais comme toi.

Merci pour le coup de main =)

Répondre à JohnMystic