recherche et classement avec php
4 messages
• Page 1 sur 1
- hanlin
- WRInaute occasionnel

- Messages: 300
- Inscription: 23 Mar 2006
recherche et classement avec php
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 :
Merci par avance !
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 !
-

antinomx - WRInaute occasionnel

- Messages: 277
- Inscription: 23 Aoû 2008
Re: recherche et classement avec php
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 ?
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

- Messages: 300
- Inscription: 23 Mar 2006
Re: recherche et classement avec php
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
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...
merci
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);
- Code: Tout sélectionner
$query_articles = 'sélection des articles';
- 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...
merci
-

antinomx - WRInaute occasionnel

- Messages: 277
- Inscription: 23 Aoû 2008
Re: recherche et classement avec php
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
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Classement menu php
- API classement moteurs de recherche du type Goldorank
- classement des moteurs de recherche par fréquentation
- classement de son site sur les moteurs de recherche
- Moteur de recherche avec classement par PR/site:/link:
- Modification page htm en php et impact sur le classement
- Classement des résultats d'une recherche dans Google actualité
- Tool ? Recherche et classement des pages d'un domaine par PR
- PHP/SQL - Classement numéroté avec table users pour jeu
- Classement Yahoo, indicateur du futur classement Google?
- Classement Xiti/1ère Position des outils de recherche en France - Août 2002 - 05-09-2002
- Classement Interbrand 2006 : la percée de Google - 01-08-2006
- Listes des requêtes les plus populaires du moment - 12-04-2006
- Classement Xiti/1ère Position des outils de recherche en France - Juillet 2002 - 01-08-2002
- Google au 4eme rang mondial en nb de visites - 08-07-2003
- Parts de marché des moteurs aux USA (Octobre 2006) - 04-12-2006
- Le baromètre de la visibilité des sites pour le terme "Google" - 13-02-2003
- Concours WRI / Vivastreet : gagnez un voyage à New-York - 21-03-2005
- 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
