IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Construction d'une requête [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Par défaut Construction d'une requête
    Bonsoir,
    Tout d'abord le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    				$sql="SELECT *  FROM prospects INNER JOIN finance ON prospects.idprospects = finance.idprospects WHERE ";
    				if(isset($_GET['nom']) && !empty($_GET['nom'])) {
    					$where .= "nomprospects LIKE '%{$_GET['nom']}%'  AND ";
    				}
    				if(isset($_GET['ref']) && !empty($_GET['ref'])) {
    					$where.= "prospects.refprospects = '{$_GET['ref']}' OR demandes.reference = '{$_GET['ref']}'  AND";
    				}
    				if(isset($_GET['tel']) && !empty($_GET['tel'])) {
    					$where.= " telprospects LIKE '%{$_GET['tel']}%' OR gsmprospects LIKE '%{$_GET['tel']}%'  AND ";
    				}
    				if(isset($_GET['statut']) && !empty($_GET['statut'])) {
    					if ($_GET['statut'] != 'Tous') {
    					$where.= "finance.statut LIKE '%{$_GET['statut']}%'  AND ";
    					}
    					else {
    							if(isset($_GET['origine']) && !empty($_GET['origine'])) {
    								if ($_GET['origine'] !='Tous') {
    								$where.='prospects.origine_origine=\''.$_GET['origine'].'\' '.'OR '.' '.'finance.origine=\''.$_GET['origine'].'\' '.'AND ';
    								}
    								else {
    									if(isset($_GET['typefi']) && !empty($_GET['typefi'])) {
    										if ($_GET['typefi'] != 'Tous') {
    										$where.='finance.fitype=\''.$_GET['typefi'].'\' '.'AND ';
    										}
    									}
    								}	
    							}
    						}	
    					}	
    					if(isset($_GET['tri']) && !empty($_GET['tri'])) {
    						$tri = $_GET['tri'];
    					}
    				// ***Finalisation de la recherche ***
    				$where = substr($where,0,strlen($where)-5);
    				$sql =$sql. $where.(" ORDER BY ").$tri.(" ASC");
    Cette requête fonctionne si au moins un des champs est renseigné ... Dans le cas ou l'utilisateur se contente de faire "rechercher" avec l'espoir d'avoir en retour tous les enregistrements, le WHERE fait planter la requete

    << mess >> SELECT * FROM prospects INNER JOIN finance ON prospects.idprospects = finance.idprospects WHERE ORDER BY ASC
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY ASC' at line 1 <</mess>>

    Comment faire pour éliminer cette erreur ? (et quel est le principe général à connaitre dans ce cas de figure ?) Enfin, si vous connaissez un bon tuto qui explique en détail comment l'on doit construire ce type de requete, je suis preneur.

    Merci et bonne soirée à tous.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 337
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 337
    Billets dans le blog
    17
    Par défaut
    Il faut retirer le WHERE de $sql puis l'y concaténer ssi $where n'est pas vide.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 185
    Par défaut
    Bonsoir Seb et merci de ton aide

    Tu veux dire ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $sql ="SELECT *  FROM prospects INNER JOIN finance ON prospects.idprospects = finance.idprospects ";
     ...
     
    $where = substr($where,0,strlen($where)-5);
     
    if (empty($where)){
    et ici ma requete sans WHERE }
     
    $sql =$sql. $where.(" ORDER BY ").$tri.(" ASC"); etc.
    J'ai compris ?
    c'est au moment de finaliser la requête que je fais un test sur le WHERE ?

    Merci de ta réponse

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Construction d'une requête un peu complexe
    Par dauphin34000 dans le forum SQL
    Réponses: 9
    Dernier message: 24/05/2007, 11h43
  2. [MySQL] Erreur lors de la construction d'une requête
    Par gaetan24 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 06/04/2007, 15h45
  3. Réponses: 1
    Dernier message: 14/02/2007, 15h51
  4. [Conception] Construction d'une requête
    Par enidnalb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 14/12/2006, 08h59
  5. Construction d'une requête imbriquée
    Par gudul dans le forum SQL
    Réponses: 20
    Dernier message: 03/07/2006, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo