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 :

Calculer le nombre de mots clés trouvés avec l'attribut COUNT


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    juriste
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : juriste

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 11
    Points
    11
    Par défaut Calculer le nombre de mots clés trouvés avec l'attribut COUNT
    Bonsoir;

    je monte un site de recherche d'auteurs et de leurs oeuvres tous les 02 sont présents dans des Articles.

    je développe une recherche par mots clés de ces trois éléments en sachant que le résultat sera affiché dans 03 tables Article, Auteurs et Titres

    j'ai besoin d'afficher au même temps le nombre de mots clés retrouvés et ce par au moins un des 02 moyens suivant :

    1 - soit que le résultat concerne les mots clés trouvés dans les 03 tables ensemble ( objectif idéal de ma présentation, il sera affiché en haut de la page) voilà le code utilisé mais qui ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     <?php 
         if (isset ( $_POST['submit-search'])){
         $search = mysqli_real_escape_string ($conn, $_POST['search']);
         $qry =("SELECT COUNT(*) AS 'count' FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%'  GROUP BY 4_etat.id_etat ");
    	$qry_result = mysqli_query ($conn, $qry );
     
        while($rows = mysql_fetch_assoc($qry_result)){
     
             $output = "Total scor tem". " ". $rows['count'];
     
    	}
    	 }
     ?>
    Voilà le résultat de la requete :

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in C:\wamp64\www\MAWSUAT1\21_22_rmc.php on line 8

    2 - soit que le résultat concerne les mots clés trouvés dans chaque tableau, solution moins agréable à mes yeux, que j'ai réussi à obtenir grace au code suivant appliqué pour chaque tableau :

    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
     
    <?php 
    	if (isset ( $_POST['submit-search'])){
    	$search = htmlspecialchars ($_POST['search']);	
    	$search = trim ($_POST['search']);
    	$search = stripslashes ($_POST['search']);
    	$search = strip_tags ($_POST['search']);
    	$search = mysqli_real_escape_string ($conn, $_POST['search']);
     
        $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' ");
    	$result =mysqli_query ($conn, $query );
     
    		if ($queryResult = $_POST['search']){
    			$queryResult = mysqli_num_rows($result); 
    			echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>";
     
    	while ($queryResult = mysqli_fetch_array( $result)){
     
    		?>	
     
    	<tr>
     
    	    <td><?php echo $queryResult['Supleta'];?></td>
    	    <td><?php echo $queryResult['extr'];?></td>
            <td><?php echo $queryResult['infopub'];?></td>
    	</tr>
    	<?php
    	}
    	}
    	else {  echo "<p style = 'font-weight:bold; '>Vous n'avez pas écrit de mot </p>";}
    	}
     
    	?>
    l'inconvénient avec cette 02ème méthode s'est qu'elle donne le résultat par nombre de ligne ainsi si le mot recherché se répète 02 fois dans la même ligne il sera compté 1 fois et non 02 fois.

    Merci par avance au mathématico - informaticien de m'éclairer un peu mieux sur le bon code à appliquer

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Voilà le résultat de la requete :

    Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in C:\wamp64\www\MAWSUAT1\21_22_rmc.php on line 8
    Faudrait faire un ptit coup de mysqli_error() après ton mysqli_query() pour voir ce qui se passe => http://www.php.net/mysqli-error

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while($rows = mysql_fetch_assoc($qry_result)){
    Attention tu utilises mysql_fetch_assoc() et pas mysqli_fetch_assoc()
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre à l'essai
    Femme Profil pro
    juriste
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : juriste

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Salut ;
    - le bout de code que tu m'as conseillé à certes fait disparaitre le Warninig, mais rien d'autre .

    - pour ce qui est de ma 02 ème méthode, je viens de constater qu'il est normal que le nombre de réponse soit afficher par ligne du moment que ma requete prévoit le search sur un seul champs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' ");
    j'augmente le nombre de champ à rechercher ds ma requete pour pouvoir obtenir "02 search" sur une même ligne comme suite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' ");
    - je modifie ma BDD pour ajouter le même mot , mais le résultat est tjr le même

    Toute autre assistance est la bien venue

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    - le bout de code que tu m'as conseillé à certes fait disparaitre le Warninig, mais rien d'autre .
    Faudrait voir ce que tu fais de ton $output.
    Dans ton extrait, rien ;-)

    Pour le reste je n'ai pas compris le problème.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre à l'essai
    Femme Profil pro
    juriste
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : juriste

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Ds la 01 ère méthode

    j'ai remplacé le $output par un echo mais je continue d'avoir un résultat selon le nombre de résultat (mots clés) par lignes et non le nombre de mots clés réel

    je pense qu'il faut modifier le bout de code par une variable qui fait référence au mots clé recherché sans tenir compte de la rangée du genre Ds la 02ème méthode, j'obtiens aussi un nombre de résultat par ligne et c'est faux, je dois aussi remplacé le bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $queryResult = mysqli_num_rows($result); 
     
    echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>";
    par une autre variable qui fait ressortir le nombre de search trouvé
    Mais xomment

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 099
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 099
    Points : 8 208
    Points
    8 208
    Billets dans le blog
    17
    Par défaut
    Tu peux récupérer le nombre de fois que ta recherche apparaît dans ton champ sur chaque ligne avec substr_count() en PHP => http://php.net/substr-count

    Si tu veux le résultat directement avec MySQL tu peux faire quelque chose dans ce genre :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT 4_etat.*, ((CHAR_LENGTH(titre) - CHAR_LENGTH(REPLACE(titre, '$search', ''))) / CHAR_LENGTH('$search')) AS nb_occurences
    FROM 4_etat 
    WHERE 4_etat.titre LIKE '%{$search}%'

    Ce qui peut te permettre de trier tes résultats par nombre d'occurences trouvées :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ...
    WHERE 4_etat.titre LIKE '%{$search}%'
    ORDER BY nb_occurences DESC
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre à l'essai
    Femme Profil pro
    juriste
    Inscrit en
    Janvier 2017
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : juriste

    Informations forums :
    Inscription : Janvier 2017
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Salut;

    je préfère me concentrer sur la 01 ère méthode car elle permet de donner des résulter sur + eurs tables. le souci c'est que le code affiche un résultat par ligne et non par occurrence du mot clé recherché .

    l'utilisation de n'a rien donné car je dois à chaque fois entrer le mot clé or ma requete prévoit un .

    voilà comment obtenir le Count des Mots clés pour 02 tables et dans lequel je dois inclure sans trop savoir comment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php if (isset ( $_POST['submit-search'])){
    $search = mysqli_real_escape_string ($conn, $_POST['search']);
    $qry =("SELECT COUNT(*) AS 'count' FROM 4_etat JOIN 5_edition ON 5_edition.id_edit = 4_etat.id_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' OR 5_edition.titredt LIKE '%{$search}%' ");
    $qry_result = mysqli_query ($conn, $qry );
    while($rows = $qry_result->fetch_assoc()){
    echo "nombre "." ". $rows['count'];
    }
    }
    ?>
    et voilà le code des 02 tables qui me permet de ressortir les mots clés recherchés ( il y a aucun souci de résultats ds les requêtes de ces 02 tables ) le souci est dans le 01 code

    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
     
    <table border ="1" cellpadding = "7" align = "center" style="font-weight: bold; text-align:center;">
    <?php
    if (isset ( $_POST['submit-search'])){
    $search = mysqli_real_escape_string ($conn, $_POST['search']);
    $query =("SELECT * FROM 4_etat WHERE 4_etat.titre LIKE '%{$search}%' OR 4_etat.autre LIKE '%{$search}%' ");
    $result =mysqli_query ($conn, $query );
    if ($queryResult = $_POST['search']){
    $queryResult = mysqli_num_rows($result);
    echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>";
    while ($queryResult = mysqli_fetch_array( $result)){
    ?>
    <tr>
    <td><?php echo $queryResult['autre'];?></td>
    <td><?php echo $queryResult['titre']; ?></td>
    </tr>
    <?php
    }
    }
    ?>
    <table/>
    <table border ="1" cellpadding = "7" align = "center" style="font-weight: bold; text-align:center;">
    <?php
    if (isset ( $_POST['submit-search'])){
    $search = mysqli_real_escape_string ($conn, $_POST['search']);
    $query =("SELECT * FROM 5_edition JOIN 4_etat ON 5_edition.id_edit = 4_etat.id_etat WHERE 5_edition.titredt LIKE '%{$search}%'");
    $result = mysqli_query ($conn, $query );
    if($queryResult = ($_POST['search'])) {
    $queryResult = mysqli_num_rows($result);
    echo "<p style = 'font-weight:bold; '>Nombre de résultats ".$queryResult."</p>";
    while ( $queryResult = mysqli_fetch_array($result)){
    ?>
    <tr>
    <td><?php echo $queryResult['titredt']; ?></td>
    </tr>
    <?php
    }
    }
    }
    ?>
    <table/>
    je serai très ravi pour toutes propositions de votre part

Discussions similaires

  1. calculer le nombre de mots identiques
    Par narjes81 dans le forum Débuter
    Réponses: 3
    Dernier message: 03/01/2011, 00h33
  2. un programme qui calcule le nombre des mots
    Par komat dans le forum Débuter
    Réponses: 3
    Dernier message: 06/12/2010, 22h46
  3. Réponses: 0
    Dernier message: 19/11/2010, 15h03
  4. [TSQL] calculer le nombre de mot dans une cellule
    Par ricachu dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 31/07/2006, 11h12
  5. Réponses: 13
    Dernier message: 16/11/2005, 13h15

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