recherche et classement avec php

hanlin
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 300
Inscription: 23 Mar 2006

recherche et classement avec php

Message le Jeu Avr 16, 2009 15:28

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: Tout sélectionner
<?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


antinomx
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 277
Inscription: 23 Aoû 2008

Re: recherche et classement avec php

Message le Ven Avr 17, 2009 17:59

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: Tout sélectionner
$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>';
   }
}
Dernière édition par antinomx le Ven Avr 17, 2009 21:03, édité 3 fois.

hanlin
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 300
Inscription: 23 Mar 2006

Re: recherche et classement avec php

Message le Ven Avr 17, 2009 20:09

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: Tout sélectionner
mysql_fetch_array($query_auteurs);
. DU coup je ne vois pas ce que je peux mettre dans la premiere requete de ton code
Code: Tout sélectionner
$query_articles = 'sélection des articles';
. C'est pour cela que j'ai cru utile de mettre d'abord la fonction
Code: Tout sélectionner
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


antinomx
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 277
Inscription: 23 Aoû 2008

Re: recherche et classement avec php

Message le Ven Avr 17, 2009 20:56

hanlin a écrit:Mais j'ai peur que lorsque la base d'article devient important (genre 10000, cela sera plus galère...).

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: Tout sélectionner
$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


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Logiciel d'analyse du positionnement
    AgentWebRanking est un logiciel professionnel qui permet d'analyser le positionnement d'un ou plusieurs sites dans plus de 300 moteurs de recherche dans le monde. Vous pouvez ainsi analyser les performances du référencement pour de nombreux mots-clés.
  • Transformer des textes non cliquables en liens
    Cet outil vous permet de trouver des pages citant votre site mais ne faisant pas (encore) de lien. Il suffira parfois d'un simple mail pour transformer cette simple citation en lien (backlink).
  • Trouver la position de son site dans Google
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Google, pour certains mots-clés recherchés.
  • Trouver la position de son site dans Yahoo
    Cet outil vous permet de vérifier si une ou plusieurs page(s) de votre site arrive(nt) dans les premiers résultats de Yahoo, pour certains mots-clés recherchés.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités