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 :

recherche multicritères sur plusieurs table [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut recherche multicritères sur plusieurs table
    bonjour

    j'avais une fonction de recherche qui marchait bien, mais j'ai fait des modifs et j'ai maintenant plusieurs tables et je souhaiterai rechercher maintenant sur ces 2 tables.
    Mais tel que je l'ai fait forcément cela aurait été trop beau cela ne fonctionne pas, plus aucune recherche fonctionne.
    dans la table produit il ya un champ importateur ou j'inser l'id du champ de la table fournisseur qui correspond
    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
     
    $mot=$_REQUEST['motclef'];
    $mot=mysql_real_escape_string($mot);
    //verification que la recherche ne soit pas vide
    if (isset($mot)){
    $motrecherche= 'WHERE `' . mysql_real_escape_string($searchpar) . '` LIKE "%' .$mot . '%"';
    }
     
    // verification si l'option rechercher partout est validé
    if($searchpar=='partout'){
    	$motrecherche='WHERE designation LIKE "%' . mysql_real_escape_string($mot) . '%" 
    	or appellation LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or constructeur LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or importateur LIKE "%' . mysql_real_escape_string($mot) . '%"';
    }
     
    //requete avec tri et recherche
    $sql= "SELECT  all * FROM produits,fournisseur ".$motrecherche.$ordre2;
     
     
     
    $resultat=mysql_query($sql)or die(mysql_error());
     
    while ($produits =mysql_fetch_array ($resultat)){
    $id= $produits['id'];
    $photo=$produits{'photo'};
    $designation= $produits ['designation'];

  2. #2
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    j'ai changé ma requête avec si j'ai bien compris une jointure des 2 tables mais je n'ai toujours rien.
    probleme de syntaxe?
    ma requête sql affiche ça
    SELECT constructeur FROM produits, fournisseur WHERE produits.importateur=fournisseur.id ORDER BY `designation`
    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
    $ordre2= ' ORDER BY `'  . mysql_real_escape_string($ordre) . '` ';
    $motrecherche= '';
    $searchpar=$_REQUEST['par'];
     
     
     
    $mot=$_REQUEST['motclef'];
    $mot=mysql_real_escape_string($mot);
    //verification que la recherche ne soit pas vide
    if (isset($mot)){
    $motrecherche= 'WHERE `' . mysql_real_escape_string($searchpar) . '` LIKE "%' .$mot . '%"';
    }
     
    // verification si l'option rechercher partout est validé
    if($searchpar=='partout'){
    	$motrecherche='WHERE designation LIKE "%' . mysql_real_escape_string($mot) . '%" 
    	or appellation LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or constructeur LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or importateur LIKE "%' . mysql_real_escape_string($mot) . '%"';
    }
     
    //requete avec tri et recherche
    $sql= "SELECT $searchpar  FROM produits, fournisseur WHERE produits.importateur=fournisseur.id".$ordre2;
     
    echo $sql;
     
    $resultat=mysql_query($sql)or die(mysql_error());
     
    while ($produits =mysql_fetch_array ($resultat)){
    $id= $produits['id'];
    $photo=$produits{'photo'};
    $designation= $produits ['designation'];
    $ref= $produits ['reference'];
    $appelation=$produits['appellation'];
    $cons= $produits['constructeur'];

  3. #3
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Bonjour,

    la syntaxe de ta requête est correcte, quel est le message d'erreur que tu obtiens et à quelle ligne ?

  4. #4
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    je n'obtiens pas de message d'erreur, rien n'est affiché, aucune correspondance n'est trouvé.

  5. #5
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    tu as essayer d'exécuter directement la requête dans phpmyadmin ... si tu as 0 résultat vérifie que ta clé étrangére "produits.importateur" est bien renseigné et que les valeurs correspondent bien à des valeurs du champ "fournisseur.id" ...

  6. #6
    Membre actif

    Homme Profil pro
    Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Inscrit en
    Juillet 2006
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Webmaster, Réalisateur Vidéo, Chef de projet Web documentaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2006
    Messages : 404
    Points : 241
    Points
    241
    Par défaut
    oups
    j'avais fait du ménage dans mes bases et fournisseur ne contenait plus rien ce qui peut expliquer pourquoi rien ne s'affichait.
    mais j'ai encore besoin d'éclaircissement.
    si je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT $searchpar FROM produits, fournisseur WHERE produits.importateur=fournisseur.id".$ordre2;
    je n'ai que le champs désigné par la variable searchpar qui s'affiche, je reviens a une forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql= "SELECT *FROM produits, fournisseur WHERE produits.importateur=fournisseur.id".$ordre2;
    j'ai toutes mes infos mais maintenant je souhaiterai retrouver ce que j'avais fait quand j'avais qu'une table.
    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
    //variable de recherche et d'ordre
     
     
    $ordre2= ' ORDER BY `'  . mysql_real_escape_string($ordre) . '` ';
    $motrecherche= '';
    $searchpar=$_REQUEST['par'];
     
     
     
    $mot=$_REQUEST['motclef'];
    $mot=mysql_real_escape_string($mot);
    //verification que la recherche ne soit pas vide
    if (isset($mot)){
    $motrecherche= 'WHERE `' . mysql_real_escape_string($searchpar) . '` LIKE "%' .$mot . '%"';
    }
     
    // verification si l'option rechercher partout est validé
    if($searchpar=='partout'){
    	$motrecherche='WHERE designation LIKE "%' . mysql_real_escape_string($mot) . '%" 
    	or appellation LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or constructeur LIKE "%' . mysql_real_escape_string($mot) . '%"
    	or importateur LIKE "%' . mysql_real_escape_string($mot) . '%"';
    }
     
    //requete avec tri et recherche
    $sql= "SELECT  * FROM produits ".$motrecherche.$ordre2;
    le where me permettait de définir le champ de recherche faut il que je mette un AND après la liaison des 2 tables ou autre moyen?

  7. #7
    Membre averti Avatar de makmaoui
    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 283
    Points : 368
    Points
    368
    Par défaut
    Salut,

    tu as 2 possibilités (selon moi) soit tu ajoutes tes conditions aprés celles portant sur la liaison des tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
     
    $sql= "SELECT  * FROM produits ".$motrecherche."  AND  produits.importateur=fournisseur.id  ".$ordre2;
     
    ?>
    soit tu utilises un autre syntaxe pour la jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
     
    $sql= "SELECT  * FROM produits INNER JOIN fournisseur ON produits.importateur=fournisseur.id ".$motrecherche.$ordre2;
     
    ?>
    je ne sais pas si cette syntaxe est compatible avec toutes les versions de MySQL (à vérifier)

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

Discussions similaires

  1. [MySQL] Recherche multicritères sur plusieurs tables
    Par bili31 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 07/03/2012, 20h17
  2. Recherche multicritères sur plusieurs tables
    Par bili31 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/01/2012, 23h30
  3. recherche multicritères sur deux tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 11h59
  4. recherche multicritères sur plusieurs tables
    Par amélie22 dans le forum Access
    Réponses: 1
    Dernier message: 16/06/2006, 09h48
  5. Recherche multicritère sur plusieurs tables
    Par Nabouille dans le forum Access
    Réponses: 3
    Dernier message: 12/04/2006, 18h39

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