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 :

Problème sur mon moteur de recherche


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut Problème sur mon moteur de recherche
    Bonjour à toutes et tous, j'ai un petit problème et peut être que vous, amis développeurs, vous trouvez une solution pour m'aider.
    Je suis en train de développer un site internet qui utilise un moteur de recherche de ma création que vous trouverez en pièce jointe.

    Mon moteur de recherche est rédigé en PHP et il a pour but de rechercher dans une base de données appelé: liste_carte. Pour l'instant, cette base ne comportait qu'une seul table appelé "liste_carte" (je sais que cela ne doit pas être pratique d'avoir appelé la table du même nom que la base mais bon ^^).

    Tout marche parfaitement mais je viens de rajouter une nouvelle table dans ma base appelé "reedition" et je voulais savoir comment faire pour que mon moteur de recherche puisse cherché dans les deux tables et en extraire les réponses correspondantes.

    Merci d'avance pour votre aide et j'attends vos réponses.
    Cordialement,
    Clairetj
    Fichiers attachés Fichiers attachés

  2. #2
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Avril 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 36
    Par défaut
    Bonjour tt le monde,
    Moi aussi j'ai le meme problème que vous, je suis entrain de developper un moteur de recherche pour mon site, lorsque je fais le filtrage sur une seule table ça marche très bien,mais une fois j'ajoute une autre table ça marche plus est ce quelqu'un a une idée sur la requete qui permettra de chercher dans plusieurs table d'une base de données
    Merci d'avance pour votre aide

  3. #3
    Expert confirmé
    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
    Par défaut
    Hello

    Vous pouvez toujours utiliser une union en mettant le nom de la table qui à matché dans un champ de résultat.

    Voici un exemple avec un recherche fulltext:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT 'articles' AS `table`, id, body, MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root') AS score
    FROM articles WHERE MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root')
    UNION
    SELECT 'articles_backup' AS `table`, id, body, MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root') AS score
    FROM articles_backup WHERE MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root');
    Produit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    +-----------------+----+-------------------------------------+------------------+
    | table           | id | body                                | score            |
    +-----------------+----+-------------------------------------+------------------+
    | articles        |  4 | 1. Never run mysqld as root. 2. ... | 1.52192711830139 |
    | articles        |  6 | When configured properly, MySQL ... | 1.31140959262848 |
    | articles_backup |  4 | 1. Never run mysqld as root. 2. ... | 1.52192711830139 |
    | articles_backup |  6 | When configured properly, MySQL ... | 1.31140959262848 |
    +-----------------+----+-------------------------------------+------------------+
    4 rows in set (0.00 sec)
    Je vous mets la procédure en pj et je vous invite à lire l'article de MySQL sur la recherche fulltext ici: http://dev.mysql.com/doc/refman/5.0/...xt-search.html

    Je ne garantis pas que cette méthode soit la meilleure.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut
    Merci pour vos réponses par contre est-ce que je pourrais te demandé quelque chose Benjamin Delespierre: avec mon code joint dans le premier topic est-ce que tu pourrais, si tu en as le temps et la possibilité, m'aidé à le modifié parce que je n'arrive pas à voir où je pourrais appliquer ta solution
    Merci d'avance,
    Cordialement,
    Clairetj

  5. #5
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2009
    Messages : 21
    Par défaut je crois que...
    Je pense que tu peux lef aire ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $reponse = mysql_query("SELECT 'articles' AS `table`, id, body, MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root') AS score
    FROM articles WHERE MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root')
    UNION
    SELECT 'articles_backup' AS `table`, id, body, MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root') AS score
    FROM articles_backup WHERE MATCH (title,body) AGAINST
    ('Security implications of running MySQL as root')");

  6. #6
    Membre éclairé

    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    532
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2011
    Messages : 532
    Par défaut
    Donc, si je te suis bien samhorry je remplace 'table' par le nom de ma table, id et body par le nom de mes différents champs et par contre 'articles_backup' je le remplace par le nom de ma base de données ????

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2009
    Messages
    126
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2009
    Messages : 126
    Par défaut Factorisation du traitement du formulaire
    Bonjour,
    Ayant un peu de tps , J'ai essayé de factoriser un peu le traitement du formulaire :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    <?php
    mysql_connect("localhost", "root", "");					// Connexion à MySQL
    mysql_select_db("liste_carte"); 						// Sélection de la base liste_carte
    mysql_query("SET NAMES UTF8");							// Corrige bug d'affichage des accents
     
    if (isset($_POST['textnom']))
    {
    	var_dump($_POST);
     
    	$e= array(
    		0=>'Veuillez entrer au moins un critère de recherche'
    	);
    	$error = 0;
    	$q = $p = '';
    	$op = "OR"; //OPERATEUR SQL
     
     
    	foreach ($_POST as $k=>$v)
    	{
    		$POST[$k] = addslashes($v); //rajoute un / devant les apostrophes, si la recherche en contient
    		if($POST[$k] != ""){
    			$error ++;
    		}
    	}
    	echo $error;
    	if($error == 0){		
    		echo $e[0];
    	}else{
    		echo 'Recherche : ';
    		foreach($POST as $k=> $Vs){
    			if($k != "selectcolor"){
    				$v = explode(" ", $Vs); //séparation des mots
    				$v_nb = count($v);
    				for($i = 0; $i < $v_nb; $i++)
    				{
    					$field = str_replace('text','',$k);
    					$q.= $op.' `'.$field.'` LIKE \'%' . $v[$i] . '%\' ';
    				}
    				$q = ltrim($q,$op); //suppression de l'opérateur au début de la boucle
    			}
    		}
    		$q_more = $q;
    		echo "<pre>".$q."</pre>";
     
    		$q = "SELECT * FROM liste_carte WHERE ".$q_more;
    		echo $q;
    		$r = mysql_query($q);
     
    		$nb = mysql_num_rows($r);
     
    		if ($nb == 0){
    			$p_debut = 'Aucun résultat ne correspond à votre recherche.';//Affichage si il n'y a aucun résultat
    		}elseif ($nb == 1){
    			$p_debut = $nb.' résultat :';//si il y a 1 résultat
    		}else{
    			$p_debut = $nb.' résultats :';						//si il y a plusieurs résultats
    		}
     
    		while ($d = mysql_fetch_array($r)){
    			$p .= '<p>';
    			$p .= '<a href="SiteRecherche.php?page=SiteCarte&id='.$d['id'].'"> '.$d['nom']; 
    			$p .= '<span class="marge"><span class="marge">	<img src="../image_mana/'.$d['mana'].'.png" /> </br>';
    			$p .= '</p>';
    		}
    		echo $p_debut.'<br/>'.$p;
     
    		mysql_close();  
    	}
    }
    ?>

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/12/2006, 16h33
  2. Stats sur les moteurs de recherche..
    Par titoumimi dans le forum Référencement
    Réponses: 5
    Dernier message: 15/03/2006, 17h31
  3. Problème requete pour moteur de recherche
    Par vincedjs dans le forum Requêtes
    Réponses: 48
    Dernier message: 15/03/2006, 14h47
  4. nombreux problèmes sur mon menu de gauche
    Par pp51 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/12/2005, 21h00
  5. problème sur mon ordi
    Par loveflower dans le forum Sécurité
    Réponses: 6
    Dernier message: 29/11/2005, 16h18

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