Bonjour, je fais appel à vous car j'e n'arrive pas à construire une requête SQL.

Voilà j'ai un table "favs" dans ma BDD, cette table répertorie les albums que mes membres ont ajoutés à leurs favoris. J'aimerais afficher la dernière entrée qui a été ajoutée 5 fois dans les favoris.

Grosso modo, je cherche la syntaxe me permettant de retrouver l'id de l'album qui revient le plus souvent dans ma table 'favs'.

Est-ce que vous pourriez m'aider svp?

8 réponses


On pourrait avoir la structure de la table ?

Natà
Auteur

Merci de ton intervention Lany mais j'ai trouvé ce que je cherchais. J'ai par ailleurs appris une nouvelle fonction SQL : HAVING.

Voilà ma requête si il y en a que ça intéresse :

SELECT id_album 
FROM favs 
GROUP BY id_album
HAVING COUNT(id_album)>=5

Cela me permet donc de faire une pré-sélection qui consiste à trouver tous les albums qui ont été ajoutés plus de 5 fois en favoris par les utilisateurs.

Parmi les résultats trouvés je fais une deuxième requête qui consiste à récupérer le dernier album avoir été ajouté en favori.

Pas de souci.
En fonction de la structure de tes tables, tu pourrais faire les deux opérations en une requête, mais c'est à voir sur bench si ça permet d'économiser en temps de traitement ou pas.

Natà
Auteur

Oui après je pense qu'on peut optimiser tout ça, mais pour le moment j'essaye de faire fonctionner, j'ai pas un gros niveau donc si ça fonctionne c'est déjà super. ^^

En revanche, j'ai maintenant un autre soucis j'aimerais appliquer cette première vérification uniquement aux, disons 30 dernières entrées de ma table, afin d'éviter que dans le temps ce ne soit pas toujours le même album qui ressorte.

Salut,

tu as juste besoin d'ajouter un LIMIT 30 (au passage je modifie un peu ta requête pour qu'elle soit plus propre, mais le résultat est le même):

SELECT count(id_album) as NB
FROM favs
GROUP BY id_album
HAVING NB >=5 LIMIT 30
Natà
Auteur

Ok, je me suis mal exprimé.

En fait, je ne voudrais appliquer ce filtre uniquement aux derniers albums qui ont étés ajoutés dans ma table "albums".

Peut-être que je devrais prendre le problème à l'envers, récupérer d'abord les 30 derniers albums et seulement ensuite appliquer ce filtre.

Il faut alors que tu ajoutes un ORDER BY dans ta requête pour la trier sur la date de façon descendante

Natà
Auteur

Oui mais non :p Je veux dire je suis obligé de faire deux requêtes, sans quoi il va me lister les favs par date d'ajout, mais le soucis c'est que ça me retournera forcément l'album le plus apprécié dans l'absolu et les albums les plus récents, malgré qu'il aient, admettons, 15 "likes" passeront inaperçus.

A la limite, je me prends un peu la tête pour rien, il suffit simplement que je récupère les 10 dernier albums ajoutés, puis parmi ces 10 que je fasse un classement, tout simplement...