PHP - Mon algorithme. - Forum PHP

PHP - Mon algorithme. [PHP]Problème algorithmie pour envoi mail » Forum - PHP Problème algorithmique (PHP) (Résolu) » Forum - PHP Traduction d'un algorithme en php » Forum - PHP Algorithme a traduire en php » Forum - PHP Algorithme d'affectation automatique aléatoirement en php » Forum - PHP

Bonjour,
Je crée un page de tendances pour des articles et il y a une chose que je n'ai pas su faire.
J'essaye de prendre dans ma BDD mysql l'article qui a le plus de vues.

Ma BDD ( table view_articles):
id -> id de la vue
id_article -> id de l'article vu
compte_view -> compte qui a vu l'article

Mes codes:

       try{  $articles = $db->prepare("SELECT id_article FROM view_articles");  $articles_dec = $id_best->fetchAll();            }catch(Exception $e){     echo " Erreur : " . $e->getMessage();     echo "L'erreur est sur la requete $/articles";   } 

Mais après avoir fait cela je me suis dit que cela servait a rien mais je vous l'ai proposé pour au moins vous donner quelque chose et je suis resté à réfléchir pendant 50 minutes puis j'en ai eu marre...
Merci d'avance pour vos propositions

Forum

PHP - Mon algorithme. [PHP]Problème algorithmie pour envoi mail » Forum - PHP Problème algorithmique (PHP) (Résolu) » Forum - PHP Traduction d'un algorithme en php » Forum - PHP Algorithme a traduire en php » Forum - PHP Algorithme d'affectation automatique aléatoirement en php » Forum - PHP

Web: www.shapebootstrap.net

9 réponses

Marsh

NOVEMBER 9, 2013 AT 9:15 PM

Bonjour,

Ton souci concerne la requête SQL elle même non ? (dans ce cas.. c'est dans le forum Base de données que ta question aurait eu sa place......)
Bref, peu importe...

Ton souci est donc de récupérer l'article qui a eu le plus de vues ? Dans ce cas, en SQL il existe la fonction COUNT qui te permettra de compter le nombre de vues.
A ça, tu ajoutes un ORDER BY DESC et un LIMIT 1 et tu obtiendras ce que tu souhaites.



NB: Pour tester ses requêtes... on le fait via une interface comme Phpmyadmin par exemple et non directement dans son code.
Cela permet de voir que les soucis proviennent de la requête SQL et non du code PHP.


Reply
réponses:
  • auteur

  • arcadenaker

    Merci pour ta réponse,
    mais je dois-je mettre comment le count()?
    et j'ai dêja mis ça:

             $articles = $db->prepare("SELECT id_article FROM view_articles ORDER BY desc LIMIT 1");  $articles_dec = $articles->fetchAll();  print_r($articles_dec);  die; 


    Mais il me renvoie un array() vide. J'avais déjà utilisé la fonction count() mais je sais pas que là il fallait l'utiliser.
    je sais que j'ai mal fait quelque chose mais j'ai jamais fait ce genre de chose en php.
    Merci de compréhension et merci d'avance pour vos réponses

  • Pinzou76

    Bonjour,
    Il me semble que la syntaxe est plutôt

    $articles = $db->prepare("SELECT id_article FROM view_articles ORDER BY [nom_de_colonne] DESC LIMIT 1");

    Il manque la colonne selon laquelle tu veux trier dans l'ordre décroissant ?

  • arcadenaker

    Mais regarde le sujet, c'est Jordan qui m'a proposé ça moi je veux juste prendre l'article dans ma bdd qui a le plus de vues

  • Pinzou76

    Je ne suis pas sûr d'avoir compris la structure de ta BDD... Dans la table view_articles, tu as une colonne indiquant le nombre de vues ?
    Si c'est le cas, fais un SELECT avec tri décroissant sur cette colonne (ORDER BY [nom_de_colonne] DESC) et prends le premier résultat (LIMIT 1)

  • arcadenaker

    Non pas vraiment j'ai une bdd qui faire quelque chose comme ça:

    TABLE: view_articles

    id --------- id_article --------- compte_view

    1 ------------- 2 ------------------ Frederic
    2 ------------- 8 ------------------ Jean
    3 ------------- 2 ------------------ Julien
    4 ------------- 7 ------------------ Lea
    5 ------------- 2 ------------------ Louise

    donc dans ce cas l'id de l'article 2 à 3 vues, voila comment marche ma table...

  • Pinzou76

    Tu pourrais faire un ForEach qui parcoure tes id_article différents.

    Avant le ForEach, tu déclares deux variables qui serviront à stocker temporairement un nombre d'occurence et un id_article.

    Dans chaque tour de boucle, tu comptes le nombre d'occurence de ton id_article dans la table avec un COUNT.

    Si le nombre d'occurence est plus grand que celui contenu dans la variable temporaire, alors:
    -tu le stock à sa place
    -tu stock l'id_article à la place de celui contenu dans l'autre variable temporaire.

    Sinon, tu ne fais rien.

    A la fin du ForEach, tes deux variables temporaires contiennent l'id_article le plus vu et son nombre d'occurence.

    Je suis conscient de ne pas avoir été très clair, n'hésite pas à me demander plus d'explications si tu ne comprends pas :)

  • Pinzou76

    Ou alors tu suis la réponse de Jordane45 qui a l'air beaucoup plus optimisée

Marsh

NOVEMBER 9, 2013 AT 9:15 PM


, c'est Jordan qui m'a proposé ça

Oulaaaa..... moi je t'ai donné les grandes lignes.... à toi d'utiliser la bonne syntaxe.
Et si tu ne la connais pas, il suffit de faire une recherche avec ton moteur de recherche favori en utilisant les termes que je t'ai donné.

Surtout que si tu avais réellement suivi mes conseils... tu n'essaierais pas tes requêtes dans ton code PHP mais depuis PHPMYADMIN.
Ca t'aurait indiqué une erreur de syntaxe !

Et pour en revenir à ta question.... il manque l'utilisation du COUNT

Un truc du genre
 SELECT id_article,               COUNT(id_article) as NB_VUES FROM tatable GROUP BY id_article ORDER BY COUNT(id_article) DESC LIMIT 1 

Reply

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed