Compter le nombre jeu qui sont du même genre, avec 2 tables

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Hola les Row,

Je vais essayer d’être le plus claire possible pour ma demande d’aide.

Je souhaite comptabiliser le nombre jeu qui sont du même genre (Action, FPS, Stratégie, etc.) avec 2 tables différentes, une où se situe la fiche du jeu, et l’autre où les jeux sont stockés; car chaque jeu est différent, mais la fiche reste la même (même nom, même éditeur, etc.).

table n°1 : fiche_jeux (id_fiche, genre)

table n°2 : jeux (id, nom_jeu, id_fiche)

J’arrive parfaitement à compter le nombre de jeu ayant le même genre via la table n°1, avec un simple COUNT :

SELECT COUNT(*) AS nb FROM fiche_jeux WHERE genre LIKE "%FPS%"

Mais, par exemple, pour FPS, il me renvoie que 1 COUNT, alors que j’ai 3 jeux ayant le même id_fiche dans la table n°2, donc le compteur devrait être 3 (pas avec cette requête, je vous l’accorde), et non 1 comme renvoyé avec la requête ci-dessus.

Le problème est là, je ne sais pas comment je peux compter le tout.

Dans tous les cas il y aura un cache, car j’ai + de 90.000 jeux listés, vous comprenez que je ne peux pas me permettre de calculer le tout à chaque fois, je compte le faire à chaque ajout et mettre à jour le cache du compteur une fois un jeu ajouté, où tous les soirs, enfin ça ce n’est pas très grave.

Des idées ? :P


EDIT A-312 : Correction d’une erreur de syntaxe Markdown provoquant une possible confusion dans les réponses à ce sujet.

Édité par A-312

« Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n’as plus besoin de l’expérience. » Léonard De Vinci

+0 -0

Il faut faire intervenir la table jeux par une jointure. Je suis pas un pro de SQL.

SELECT COUNT(*) AS nb FROM jeux NATURAL JOIN fiche_jeux WHERE genre LIKE "%FPS%"

Ça ressemblerait à ça.

ache.one                 🦹         👾                                🦊

+0 -0
Auteur du sujet

Il faut faire intervenir la table jeux par une jointure. Je suis pas un pro de SQL.

SELECT COUNT(*) AS nb FROM jeux NATURAL JOIN fiche_jeux WHERE genre LIKE "%FPS%"

Ça ressemblerait à ça.

ache

Non, car il ne prends pas l’id de la fiche en compte, du coup ça me renvoie moins de résultat, j’ai essayé pas mal de jointure, sans réel sucés hélas. Mon niveau n’est assez élevé :/

« Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n’as plus besoin de l’expérience. » Léonard De Vinci

+0 -0

Essaye avec des simples quote (’) au lieu de double quote (").

jeux=# SELECT * FROM jeux;
   nom    | id_table 
----------+----------
 CS:GO    |        1
 Fortnite |        1
 PUBG     |        1
(3 lignes)

jeux=# SELECT * FROM fiche_genre;
 id_fiche | genre 
----------+-------
        1 | FPS
        2 | MOBA
(2 lignes)

jeux=# SELECT COUNT(*) AS nb FROM jeux NATURAL JOIN fiche_genre WHERE genre LIKE '%FPS%';
 nb 
----
  3
(1 ligne)

ache.one                 🦹         👾                                🦊

+1 -0

Non, car il ne prends pas l’id de la fiche en compte, du coup ça me renvoie moins de résultat, j’ai essayé pas mal de jointure, sans réel sucés hélas. Mon niveau n’est assez élevé :/

Machou

Comment ça ? Explique alors un peu mieux ce que tu cherches à compter. Moi par exemple j’ai compris que tu voulais compter le nombre de lignes dans la table jeux dont le champ idfiche se référait à une fiche d’un certain genre (disons « FPS »).

Tu veux compter le nombre de jeux + le nombre de fiches ? À quoi correspondent les fiches ?

Cette réponse a aidé l’auteur du sujet

LIKE "%FPS%" est très lent si je me souviens bien de mes recherches. Dans ton cas actuel, il vaut mieux passer par =.

Je me demande aussi si ce n’est pas mieux de mettre un SLUG en id, c’est à dire un VARCHAR contenant du texte.

Sans parler qu’il important de bien faire ses clés primaires et clés étrangères.

SELECT COUNT(*) AS nb
FROM fiche_jeux
INNER JOIN jeux ON fiche_jeux.id_fiche = jeux.id_fiche 
WHERE genre = "FPS"

Je me suis permis de corriger l’erreur de markdown : « table n°2 : jeux (id, nomjeu, idfiche) » en « table n°2 : jeux (id, nom_jeu, id_fiche) » dans le sujet pour éviter les confusions.

Édité par A-312

✈️ // 🐺 Ami des loups // 🎮 Coding Game // 🐤 Twitter @A312_zds // :B // L’hiver vient // @**A-312** pour me ping

+1 -0
Auteur du sujet

C’est juste un exemple simple que j’ai donné, mes clés, mes indexes, etc. tout est bien présent. Mon code est rapide, fluide et surtout sécurisé :p

Je ne peux pas utiliser "=", car j’ai certains genres comme "FPS, Action", ou "FPS, Epouvante-horreur", etc. donc ça ne collerai pas.

Pourquoi tu souhaites un slug en id ? j’ai toujours utilisé les chiffres ^^

En tout cas, ça à l’air de fonctionner avec la requête que tu as donné !

Et sur 90k jeux, la page a été générée en 0.214 secondes, donc ça va. :)

J’ai refait tous les calculs, et vérifier les genres, tout tombe parfaitement ok.

En te remerciant

Édité par Machou

« Dans la nature, tout a toujours une raison. Si tu comprends cette raison, tu n’as plus besoin de l’expérience. » Léonard De Vinci

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte