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 :

moteur de recherche sur plusieurs table liees


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseau
    Inscrit en
    Février 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Technicien réseau
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Février 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut moteur de recherche sur plusieurs table liees
    bonjour je voudrais créer un moteur de recherche interne en php. j'utilise une base de données sql qui ressemble au schéma de la pièces jointes

    le but étant de récuperer dans un tableau html :

    (clients.code)_(affaires)_(sous_affaires)_(PP)_(producteurs.tag)_(date)
    exemple : AMA_bon_ben_PP1_JNO_2012-02-17

    les personnes qui utiliseront ce moteur de recherche, rentreront dans le champ texte les éléments si dessus.
    je n'arrive pas à rechercher sur toutes les tables en même temps avec un seul champ texte.
    si une personne peut m'aider c'est cool
    Images attachées Images attachées  

  2. #2
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Points : 194
    Points
    194
    Par défaut
    Si j'ai bien compris il faut écrire une requête pour chaque champs à comparer avec ce qui est rentré dans le champs de saisie puis effectué chacune des requêtes en y passant ton terme saisi puis agréger les résultats.
    Pseudo-code pas testé mais utile pour donner une idée:
    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
    <?php
    ...
     
    $reqs = array();
    $reqs["nom_req1"] = "SELECT * FROM clients,informations,producteurs WHERE client.nom =".$_GET['terme_saisi_dans_le_champs_de_recherche'];
    $reqs["nom_req2"] = "SELECT * FROM clients,informations,producteurs WHERE client.code =".$_GET['terme_saisi_dans_le_champs_de_recherche'];
    $reqs["nom_req3"] = "SELECT * FROM clients,informations,producteurs WHERE affires =".$_GET['terme_saisi_dans_le_champs_de_recherche'];
    $reqs["nom_req4"] = "SELECT * FROM clients,informations,producteurs WHERE sous_affaires =".$_GET['terme_saisi_dans_le_champs_de_recherche'];
    $reqs["nom_req5"] = "SELECT * FROM clients,informations,producteurs WHERE pp =".$_GET['terme_saisi_dans_le_champs_de_recherche'];
     
    ...
     
    $results = array();
     
    foreach($reqs as $name=>$req){
    	//requete à la base (exemple avec mysql)
    	$res = mysql_query($req);
    	$temp = array();
    	while($row = mysql_fetch_assoc($res)){
    		$temp[] = $row;
    	}
    	$results[$name] = $temp;
    }
     
    //ici on affiche les données comme on le souhaite, le tableau est structuré de même manière pour toutes les requêtes
    ?>

  3. #3
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Le plus simple et le plus efficace est d'écrire la requête de jointure pour les 3 tables et d'ajouter une bête clause where pour filtrer les données.

    Voir: http://dev.mysql.com/doc/refman/5.0/fr/join.html

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2009
    Messages
    141
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2009
    Messages : 141
    Points : 194
    Points
    194
    Par défaut
    C'est vrai que je n'ai pas mis la jointure dans mes requêtes mais c'est un oubli, il faut bien sûr les mettre sur chacune des requêtes.
    Le plus simple et le plus efficace est d'écrire la requête de jointure pour les 3 tables et d'ajouter une bête clause where pour filtrer les données.
    Si j'ai bien compris (ce qui n'est pas sûr), je crois qu'il veut pouvoir faire une recherche sur n'importe quel champs sans que cela soit spécifié, donc une seule requête ne suffit pas.

  5. #5
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Voici plutôt ce que j'avais en tête:
    Code PHP : 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
    $search_query = <<< EOSQL
    SELECT
    	c.idClient As clients_id, 
    	c.nom AS clients_nom,
    	c.code AS clients_code,
    	i.id AS informations_id,
    	i.affaires AS informations_affaires,
    	i.sous_affaires AS informations_sous_affaires,
    	i.pp AS informations_pp
    	i.date AS informations_date,
    	p.idProducteur AS producteurs_id,
    	p.nom As producteurs_nom,
    	p.tag AS producteur_tag
    FROM
    	clients AS c JOIN
    	informations AS i ON (c.idClient=i.idClient) JOIN
    	producteurs AS p ON (p.idProducteur=i.idProducteur)
    EOSQL;
     
    if (!empty($search_params)) {
    	foreach ($search_params as $key => $value) {
    		$pieces[$key] = "`$key`=:$key";
    	}
    	$query .= ' WHERE ' . implode(' AND ', $pieces);
    }
     
    $stmt = $pdo->prepare($query);
    if (!$stmt->execute($search_params)) {
    	throw new RuntimeException("Unable to execute query");
    }
     
    var_dump( $stmt->fetchAll(PDO::FETCH_ASSOC) );

Discussions similaires

  1. [MySQL] moteur de recherche sur plusieur table php mysql
    Par chrisl46 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/04/2014, 18h33
  2. [MySQL] Moteur de recherche sur plusieurs tables
    Par lelectronique.com dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 05/01/2010, 14h12
  3. [MySQL] moteur de recherche sur plusieurs tables
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/04/2007, 15h23
  4. [MySQL] Moteur de recherche sur plusieurs pages
    Par DonKnacki dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 30/01/2007, 14h47
  5. [MySQL] Recherche sur plusieurs tables
    Par hubidev dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 21/03/2006, 10h42

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