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 :

Exclure et non supprimer une chaîne de caractère d'une recherche


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut Exclure et non supprimer une chaîne de caractère d'une recherche
    Bonjour,

    Je vais essayer d'être le plus clair possible, je précise que je ne suis pas développeur mais je cherche à développer un petit moteur de recherche interne qui va chercher sur plusieurs DB des valeurs en fonction d'un mot clé.

    J'ai donc :

    - 1 DB de type "FAQ"
    - 1 DB de type "TICKETS"

    Je cherche avec le même champ "Recherche" dans les 2 DB

    Le soucis est que dans la table "FAQ" la colonne "Contenu" reprend le contenu de la FAQ mais les images présentes dans ce contenu son "encodées" ce qui fausse le résultat de ma recherche.

    Par exemple lorsque je recherche "59" qui devrait me sortir donc tous les Tickets et/ou FAQs portant le numéro 59 ET les tickets/faq ayant "59" dans leurs contenu, la requête me sort TOUTES les FAQs car le terme "59" est dans la partie encodée du <img>

    Je voudrais donc exclure "de la recherche" tout ce qu'il y a entre le <img> et le </img> ce qui me permettrait de pouvoir rechercher uniquement dans le contenu "textuel" de la FAQ.

    J'espère avoir été clair.

    Si vous avez besoin de code voici le code de ma page PHP (avec requête SQL), encore une fois je ne suis pas développeur donc il y a surement énormément d'incohérences dans ce code, mais il fonctionne en dehors de mon soucis expliqué ci-dessus.

    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
    <?php
     
    // DECLARATION DB
    $db = mysql_connect ('XXXXXX', 'XXXXXXXX', 'XXXXXXXXX');
    mysql_select_db('XXXXXXXXXX', $db);
     
    $lienticket = 'XXXXXXXXXXXXXXXXX';
     
    if (empty($_POST['motcle'])) {
        // AFFICHAGE SI AUCUNE RECHERCHE
    }
    else {
    	// REQUETE SQL
    	$sql = '
    		SELECT * FROM hprofaqdata
    		WHERE hprofaqdata.active = "yes"
    		AND (
    		hprofaqdata.thema LIKE \'%'.$_POST['motcle'].'%\'
    		OR hprofaqdata.content LIKE \'%'.$_POST['motcle'].'%\' )
    		';
    	// EXECUTION DE LA REQUETE SQL
    	$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    	// RECUPERATION DE PLUSIEURS TICKETS
    	while ($data = mysql_fetch_array($req)) {
    	// AFFICHAGE DES RESULTATS
    		echo '<strong>FAQ ID :</strong><a href="#" onclick="window.open(\''.$lienticket.$data['id'].'\')">'.$data['id'].'</a> <br />';
    		echo '<strong>Titre :</strong> '.$data['thema'].'<br />';
     
    	}
     
    }
    //
     
    // CLEAN DE LA MEMOIRE DB
    mysql_free_result ($req);
    mysql_close ();
     
    ?>

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    bonne question.

    Je cherche depuis ce matin une réponse, via Regex (REGEXP SQL)... pour l'instant sans succès.
    Dernière modification par Invité ; 19/08/2016 à 16h06.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut
    Oui j'ai également cherché avec REGEXP mais je n'ai rien trouvé qui convienne parfaitement... J'ai détourné le problème pour l'instant mais il faut tout de même que j'y trouve une réponse.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Ce qui m'a étonné le plus, c'est de n'avoir quasiment rien trouvé sur le sujet,
    alors que la plupart des "modules de recherche" le font sur du contenu formaté HTML (contenu d'articles,...), et donc contenant des balises HTML.

    Du coup, il faudrait exclure le contenu de toutes les balises HTML.
    Exemples tout bête :
    • recherche "strong", alors que j'ai une balise <strong> dans mon texte...
    • On peut avoir le mot-clé recherché au sein d'une balise (<a href=".../motcle/..."> ou <img src=".../motcle/..."> ou...).



    Bref, j'ai l'impression que la solution "... LIKE %xxx%..." ait été largement privilégiée dans tous les cas.
    Pourquoi ?
    • solution de facilité ?
    • performances ?
    • ... ?


    N.B. Je suis notamment tombé sur cette discussion, qui semble trouver une solution en JavaScript :
    Code JavaScript : Sélectionner tout - Visualiser dans une fenêtre à part
    var pattern = '('+quoi+')(?![^<]*>)';
    Mais je n'ai pas su le traduire en SQL...

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    " ... WHERE contenu REGEXP '(".$motcle.")(?![^<]*>)' "
    me donne l'erreur :
    SQLSTATE[42000]: Syntax error or access violation: 1139 Got error 'repetition-operator operand invalid' from regexp
    Dernière modification par Invité ; 22/08/2016 à 09h40.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut
    Merci je vais creuser le sujet, j'en suis au même point que vous, difficile de trouver le bon résultat.

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Le like de SQL n'est pas vraiment l'idéal quand on veux faire un moteur de recherche.
    A minima il faudrait plutôt s'orienter vers une recherche fulltext :

    http://dev.mysql.com/doc/refman/5.7/...xt-search.html
    http://omiossec.developpez.com/mysql/fulltext/

    Le problème de cette solution c'est que si la base n'a pas été construite pour dès le début , il vaut revoir la structure de la base (avoir les index fulltext, séparer texte brute et texte avec html , etc ...).
    L'autre problème du fulltext en mysql c'est qu'il devient lent au fur et à mesure que la base grossie. Pour quelque dizaine de milliers d'éléments à rechercher c'est très bien au delà c'est plus compliqué.

    La solution c'est de passer par des vraies outils de recherche tel que Solr
    En revanche , sans trop m'avancer utiliser ce genre d'outil uniquement en tant qu'indexer , oblige à les maintenir synchronisés en permanence avec la ou les bases que l'on souhaite utiliser.

    Un "patch" rapide à ton problème pourrait être d'effectuer un premier filtre via SQL comme tu le fais déjà puis ensuite en PHP de repasser les résultats en revue en éliminant ceux dont le contenu est dans des balises.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Juin 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2016
    Messages : 6
    Par défaut
    Merci pour ces infos, le soucis pour le fulltext c'est que je n'ai pas "la main" sur les tables, pour Solr je vais regarder je n'ai jamais entendu parler de ça.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Inutile de "Répondre avec citation" un message complet : cliquez sur le bouton "+Répondre à la discussion" (en bas à gauche)

Discussions similaires

  1. supprimer les caractères \" d'une chaîne de caractères
    Par laurentSc dans le forum Langage
    Réponses: 23
    Dernier message: 17/09/2011, 23h52
  2. Réponses: 6
    Dernier message: 09/11/2010, 16h31
  3. Supprimer une chaîne de caractère d'une colonne
    Par theghit dans le forum Requêtes
    Réponses: 13
    Dernier message: 01/08/2008, 15h19
  4. Supprimer les N premiers caractères d'une chaîne
    Par kobalt02 dans le forum Débuter
    Réponses: 7
    Dernier message: 11/07/2008, 09h25
  5. Extraire une chaîne de caractères d'une chaîne
    Par dj-julio dans le forum Excel
    Réponses: 13
    Dernier message: 21/09/2007, 11h05

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