PHP - Mon algorithme.

Fermé
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 - Modifié le 11 juil. 2018 à 10:08
Pinzou76 Messages postés 614 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 - 11 juil. 2018 à 15:49
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
A voir également:

2 réponses

jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
11 juil. 2018 à 11:35
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.


0
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
Modifié le 11 juil. 2018 à 14:30
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
0
Pinzou76 Messages postés 614 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 191
11 juil. 2018 à 14:32
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 ?
0
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
11 juil. 2018 à 15:08
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
0
Pinzou76 Messages postés 614 Date d'inscription dimanche 17 septembre 2017 Statut Membre Dernière intervention 25 février 2019 191
Modifié le 11 juil. 2018 à 15:11
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)
0
arcadenaker Messages postés 61 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 22 avril 2019 1
Modifié le 11 juil. 2018 à 15:28
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...
0
jordane45 Messages postés 38326 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 décembre 2024 4 711
Modifié le 11 juil. 2018 à 16:06

, 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
0