recherche et classement avec php

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par hanlin, 16 Avril 2009.

  1. hanlin
    hanlin WRInaute occasionnel
    Inscrit:
    23 Mars 2006
    Messages:
    263
    J'aime reçus:
    0
    Bonjour,
    J'essaye de mettre en place une page qui me permet de donner des statistiques sur le nombre de fois ou chaque auteur d'ouvrage a été cité dans les articles du site.
    J'ai une table listant les auteurs (id,, nom, occurance)
    J'ai une table articles (titre, texte)

    J'ai écrit un morceau de code mais bon , c pas top et je galère même si j'arrive à obtenir ce que je veux...Deux problèmes :
    1-une erreur à la fin de l'exécution qui s'affiche en haut de ma page :
    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource...
    2-le temps de chargement est long (j'ai 600 auteurs à chercher dans une table d'articles importante), je ne sais pas vraiment comment optimiser cela pour consommer moins de ressources.
    Si quelqu'un pouvait me donner son avis d'expert et m'aider à avancer dans ma besogne, je lui serait reconnaissant.
    Voici ce que j'ai écrit :
    Code:
    <?php 
    
    	function get_rows ($key) 
    	{
    	
    
            $total = mysql_query("SELECT COUNT(*) FROM article WHERE title REGEXP '[[:<:]]($key)[[:>:]]'");
    		
    	
            $total = mysql_fetch_array($total);
            return $total[0];
    		
        } 
    	
    	$sql= mysql_query ("select * from author ");
    
        while ($results= mysql_fetch_array ($sql)) 
    	{
    	
    			$id= $results['id'];
      			$number=get_rows ($key);
    	
    	  
    
    			mysql_query("UPDATE author SET occurence='$number' WHERE (id='$id')"); 
    	
    	}
    
    
    
    ?>
    Merci par avance ! :D
     
  2. u94082
    u94082 WRInaute occasionnel
    Inscrit:
    23 Août 2008
    Messages:
    257
    J'aime reçus:
    0
    Salut,

    Vu le nombre important d'auteurs et d'articles il est clair que tu ne pourra jamais avoir une page suffisamment rapide à charger pour ton visiteur. Il faut forcément passer par un cache et une tache cron (mais bon je peut me tromper, ya pas un gourou ds le coin ?).
    Et puis pour bien faire la fonction qui cherche le nombre d'auteurs dans les articles et met à jour la table occurence devrait être implémentée au moment ou tu enregistre l'article dans ta bdd, mais bon c'est que pour le futur...
    Dans l'absolu il ne vaudrait pas mieux partir sur quelque chose comme ci-dessous ?

    Code:
    $query_articles = 'sélection des articles';
    $articles = mysql_fetch_array($query_articles);
    
    $query_auteurs = 'sélection des auteurs';
    $auteurs = mysql_fetch_array($query_auteurs);
    
    foreach ($articles as $article) {
       foreach ($auteurs as $auteur) {
          $occurences = explode($auteur, $article);
          $occurences = $occurences - 1;
          echo $auteur' trouvé '.$occurences.' foi(s) dans .'$article.'<br>';
       }
    }
    
     
  3. hanlin
    hanlin WRInaute occasionnel
    Inscrit:
    23 Mars 2006
    Messages:
    263
    J'aime reçus:
    0
    Salut antinomx et merci pour ta réponse. Ce que j'ai tenté aujourd'hui c'est de faire un peu comme tu l'as décrit...Une table avec le nom de tous les auteurs. Un cron que je lance tous les soirs et qui met à jour cette table. Pour le morceau de code que j'ai mis en ligne, ma fois , cela marche assez bien. Mais j'ai peur que lorsque la base d'article devient important (genre 10000, cela sera plus galère...).
    Dans ton code, si j'ai bien compris je sélectionne des articles ? Je dois les selectionner en fonction de chaque auteur resultant de la requete
    Code:
    mysql_fetch_array($query_auteurs);
    . DU coup je ne vois pas ce que je peux mettre dans la premiere requete de ton code
    Code:
    $query_articles = 'sélection des articles';
    . C'est pour cela que j'ai cru utile de mettre d'abord la fonction
    Code:
    function get_rows ($key) 
    ...
    Je suis pas très bon en prog, je bidouille, peut être que j'ai loupé un truc... Pour l'instant cela fonctionne, j'ai pensé à grouper les auteurs par 100 et à mettre à jour la table par groupe de 100 en faisant genre une pause entre chaque mise à jour.
    ça doit être simple mais ça ma tordu la cervelle cette histoire... 8O
    merci
     
  4. u94082
    u94082 WRInaute occasionnel
    Inscrit:
    23 Août 2008
    Messages:
    257
    J'aime reçus:
    0
    C'est bien pour ça qu'il faut implémenter cette étape avant, au moment ou l'article est enregistré dans ta base juste après l'avoir écrit.

    Le principe du code posté c'est de sélectionner tous les articles (le texte) et tous les auteurs (le nom). Puis de parcourir les deux tableaux qui en résultent. Donc tu parcours tous les articles, pour chaque tu parcours tous les auteurs en explosant le texte par le nom, ça te donne un tableaux dont tu compte le nombre de clés.

    Le code est trop simplifié, en fait ça serait plutôt :
    Code:
    $query_articles = mysql_query("SELECT texte FROM articles");
    $articles = mysql_fetch_array($query_articles);
    
    $query_auteurs = mysql_query("SELECT nom FROM auteurs");
    $auteurs = mysql_fetch_array($query_auteurs);
    
    foreach ($articles as $article) {
       foreach ($auteurs as $auteur) {
          $occurences = count(explode($auteur[0], $article[0]));
          $occurences = $occurences - 1;
          echo $auteur' trouvé '.$occurences.' foi(s) dans .'$article.'<br>';
          mysql_query("UPDATE author SET occurence='$occurences' WHERE nom='$auteur[0]'"); 
          flush;
       }
    }
    Enfin faut tester... je suis pas vraiment sûr
     
Chargement...
Similar Threads - recherche classement php Forum Date
Classement par popularité sur recherche google. Référencement Google 5 Février 2013
Rotation (yoyo) des classements sur la première page de recherche Google ? Référencement Google 23 Mars 2012
Classement des résultats d'une recherche dans Google actualité Google : l'entreprise, les sites web, les services 24 Août 2011
Tool ? Recherche et classement des pages d'un domaine par PR Référencement Google 12 Juillet 2010
API classement moteurs de recherche du type Goldorank Développement d'un site Web ou d'une appli mobile 8 Juillet 2008
classement de son site sur les moteurs de recherche Débuter en référencement 26 Septembre 2006
Classement des mots-clef les plus recherchés Développement d'un site Web ou d'une appli mobile 8 Août 2006
Moteur de recherche avec classement par PR/site:/link: Netlinking, backlinks, liens et redirections 17 Avril 2005
Les classements sur les différentes zones de recherche. Débuter en référencement 14 Juin 2004
Recherche d'affiliés Thématique Déco e-commerce 4 Mai 2022
Google Keyword Planner: que signifie volume de recherche '0'? AdWords 31 Mars 2022
Comment apparaître dans le bloc "Rechercher des résultats sur" Techniques avancées de référencement 9 Février 2022
Moteur de recherche interne dans mon site Demandes d'avis et de conseils sur vos sites 4 Février 2022
Search Console Negative SEO - SPAM - Page de Recherche - RSS2 - Wordpress Problèmes de référencement spécifiques à vos sites 13 Janvier 2022
Site indexé mais introuvable avec termes de recherche spécifiques Problèmes de référencement spécifiques à vos sites 22 Décembre 2021
Ajout bouton recherche Google sur mon site : Impact SEO Demandes d'avis et de conseils sur vos sites 22 Décembre 2021
Tout simplement à la recherche de conseils... Débuter en référencement 13 Novembre 2021
Volume recherche mots-clés Débuter en référencement 31 Octobre 2021
Impossible de décocher la case de demander aux moteurs de recherche Problèmes de référencement spécifiques à vos sites 29 Octobre 2021
Le moteur de recherche neeva.com demande de payer pour rechercher Autres moteurs de recherche connus 23 Août 2021