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 :

Un moteur de recherche instable [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut Un moteur de recherche instable
    Salut ^^
    J'ai essayé de faire un petit moteur de recherche afin de trouver des entrées dans ma BDD, mais quand j'exécute la requête, elle me fait planter le PC
    Pourriez-vous me dire ce que vous en pensez ?
    Merci ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // La partie HTML
    <form method="post" action="<?php $PHP_SELF ?>">
    	<td align="center" class="lien" height="20">
    		<input type="text" name="search" size="15">
    		<input type="submit" name="image" value="OK">
    	</td>
    </form>
    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
    // La partie requête
    $saisie = $_POST['search'];
    	if(isset($saisie))
    	{
    		$recherche = "SELECT repertoire.id_rep, repertoire.id_pers, personnel.nom, fonction.fonction, service.service 
    		FROM repertoire, personnel, fonction, service 
    		WHERE repertoire.id_pers = personnel.id_pers 
    		AND personnel.id_fonction = fonction.id_fonction 
    		AND personnel.id_service = service.id_service 
    		AND personnel.nom LIKE '".$saisie."' 
    		OR fonction.fonction LIKE '".$saisie."' 
    		OR service.service LIKE '".$saisie."' 
    		OR repertoire.num_int LIKE '".$saisie."' 
    		OR repertoire.num_ext LIKE '".$saisie."' 
    		OR repertoire.num_fax LIKE '".$saisie."' 
    		OR repertoire.num_port LIKE '".$saisie."'";
    		$recherche_finale = mysql_query($recherche) or die(mysql_error());
    	}

  2. #2
    Membre chevronné Avatar de nicocsgamer
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    321
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 321
    Par défaut
    Tu as essayé de lancer cette requête sur ton SGBD sans passer par PHP ?

    Et si tu simplifie ta requête ?

  3. #3
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut
    Oui j'ai essayé de la lancer par MySQL et ça me fait quand même tout planter ^^
    Et comment la simplifier ?

  4. #4
    Membre confirmé Avatar de kernigansnotdead
    Homme Profil pro
    Traducteur technique anglais > français indépendant
    Inscrit en
    Septembre 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Traducteur technique anglais > français indépendant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 77
    Par défaut
    Salut,

    a ta place, j'utiliserais pas le 'or die' et j'utiliserais echo mysql_error();

    De meme je mettrais un echo juste avant $recherche = "SELECT repertoire....
    -> echo $recherche = "SELECT repertoire....
    juste pour tester

    voila, ça t'aidera peut-etre, pour le reste, la requete à l'air correcte

    KND

  5. #5
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Deux petites remarques sur ta syntaxe :
    1 - tu peux écrire "OR fonction.fonction LIKE '$saisie' " plutôt que OR fonction.fonction LIKE '".$saisie."' (c'est valable sur toutes les lignes). Les variables sont évaluées dans les doubles quotes, et c'est nettement plus lisible.
    2 - sur le fond de ta requête : si $saisie ne comporte pas de joker, tu ferais mieux d'utiliser l'opérateur = plutôt que LIKE.
    Sinon, tu peux ajouter des jokers dans ta requête de cette façon : "OR fonction.fonction LIKE '$saisie%' ".

    Sinon, tu dis que ça plante, mais quels sont les symptômes ?

  6. #6
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut
    Bon ben merci ^^
    Alors la requête doit être trop lourdre (en effet les 4 tables contiennent chacune plus de 200 entrées ^^)

    EDIT : désolé j'ai vu ton message trop tard ^^
    MySQL ralenti tout et fini par tout planter.
    Mais j'ai trouvé un autre moyen de faire la requête (par choix de table sur la page principale).
    Merci ^^

  7. #7
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Par défaut
    Non, 200 entrées c'est rien du tout, j'ai des tables de 4 millions d'entrées avec MySQL, ça doit venir d'ailleurs. Tu as essayé de réécrire ta requête avec la syntaxe JOIN ?

  8. #8
    Membre confirmé Avatar de Lenezir
    Inscrit en
    Février 2006
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Février 2006
    Messages : 129
    Par défaut
    Connais pas cet élément
    Mais j'ai trouvé une meilleure solution.
    J'ai fais un peu comme Google, avec des boutons radio pour le choix de la table :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // Formulaire
    <form method="post" action="<?php $PHP_SELF ?>">
    				<td align="center" class="lien" height="20">
    					<input type="text" name="search" size="15" />
    					<input type="submit" name="image" value="OK" /><br/>
    					<input type="radio" name="table" value="service.service" />Services
    					<input type="radio" name="table" value="fonction.fonction" />Fonctions
    					<input type="radio" name="table" value="personnel.nom" checked />Noms
    				</td>
    			</form>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // La requête
    $saisie = $_POST['search'];
    	$champ = $_POST['table'];
    	if(isset($saisie))
    	{
    		$recherche = "SELECT repertoire.id_rep, repertoire.id_pers, personnel.nom, fonction.fonction, service.service 
    		FROM repertoire, personnel, fonction, service 
    		WHERE repertoire.id_pers = personnel.id_pers 
    		AND personnel.id_fonction = fonction.id_fonction 
    		AND personnel.id_service = service.id_service 
    		AND ".$champ." LIKE '%".$saisie."%'";
    		$recherche_inter = mysql_query($recherche) or die(mysql_error());
    	}

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

Discussions similaires

  1. [Info]moteur de recherche full text en environnement j2ee
    Par ddams dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 03/11/2004, 19h39
  2. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  3. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  4. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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