Bonjour,
Voila je rencontre un petit problème avec mon code.
J'ai les table jeux, genres et jeux_genres. Je souhaite avoir plusieurs genres dans un jeu (mais un genre peut être dans plusieurs jeux)
Dans la table jeux, j'ai l'id, libelle, etc
Dans la table genres j'ai l'id et le libelle
Dans la table jeux_genres j'ai l'id, et les deux clé etrangeres id_jeux et id_genres
je fais un petit test
<?php
$bdd = new PDO('mysql:host=localhost;dbname=test','root','');
$requete = $bdd->prepare("SELECT jg.id_jeux_genres, j.libelle, j.prix, j.stock, j.date_sortie, j.description, j.note, j.image, g.libelle_genre
FROM jeux j, jeux_genres jg, genres g
WHERE j.idjeu = jg.id_jeux
AND jg.id_genres = g.idgenre
");
$requete->execute();
$r =$requete->fetchAll(PDO::FETCH_OBJ);
var_dump($r);exit();
foreach($r as $val)
{
echo $val->libelle." ";
}
Retourner une seule fois un jeu avec ses informations et tous ses genres
j'ai plusieurs fois le jeu pour un genre (j'ai l'inverse de ce que je veux)
merci d'avance pour votre aide =)
Bonjour
Essaye avec GROUP_CONCAT() et GROUP_BY
SELECT j.libelle, j.prix, GROUP_CONCAT(g.libelle_genre SEPARATOR ',') AS genres
FROM jeux AS j
LEFT JOIN jeux_genres AS jg ON jg.jeu_id = j.id
LEFT JOIN genres AS g ON g.id = jg.genre_id
GROUP BY j.id
Je ne sais pas, si c'est la meilleur solution mais ca devrait fonctionné
un schéma de ta base ne serai pas de refu, mais si je comprend bien t'a requête, tu ne met pas de condition qui permet de retourner qu'un seul jeu et tu a mis des conditions pour que les liaisons entre les tables soit bonnes c'est tout, rajoute une condition pour dire que tu souhaite avoir telle jeu, ou si tu veux choper que le premier tu rajoute un limit 1
=> Mysql Limit.
Bonjour.
Dans ta requête SQL tu ne fais pas réellement de jointure, tu devrais visionner Tutoriel Vidéo MySQL » Les jointures MySQL.
Merci pour vos réponses j'ai regardé le tuto
J'ai essayé ceci:
SELECT jeux.libelle, jeux.prix , genres.libelle_genre
FROM jeux
LEFT JOIN jeux_genres AS jg ON jg.id_jeux = jeux.idjeu
LEFT JOIN genres ON genres.idgenre = jg.id_genres
Mais ça revient exactement à la même chose... j'ai pour chaque genre un jeu et j'essaie d'avoir l'inverse avoir pour un seul jeu tous ses genres
Fukotaku oui mais j'essaie d'avoir pour chaque jeu tous ses genres mais je ne vois pas comment faire... :/
J'ai déjà essayé avec le group by (tuto sur les requetes sql)
SELECT jeux.libelle, jeux.prix , genres.libelle_genre
FROM jeux
LEFT JOIN jeux_genres AS jg ON jg.id_jeux = jeux.idjeu
LEFT JOIN genres ON genres.idgenre = jg.id_genres
GROUP BY jeux.idjeu
Je tombe sur:
1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'test.genres.libelle_genre' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_byet en y ajoutant le count
SELECT COUNT (jeux.idjeu) AS nb, jeux.libelle, jeux.prix , genres.libelle_genre
FROM jeux
LEFT JOIN jeux_genres AS jg ON jg.id_jeux = jeux.idjeu
LEFT JOIN genres ON genres.idgenre = jg.id_genres
GROUP BY jeux.idjeu
1630 - FUNCTION test.COUNT does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual
C'est une solution merci et vous savez comment le mettre sous forme de tableau? Car c'est juste une chaine de caractère
1 =>
object(stdClass)[4]
public 'libelle' => string 'assassin's creed syndicate' (length=26)
public 'prix' => string '19.99' (length=5)
public 'genres' => string 'aventure,action' (length=15)
sinon j'ai dans l'idée de mettre ce string en deux éléments de tableau mais ce n'est pas terrible ma méthode =/
Je ne sais pas si c'est possible directement en sql, mais tu peux utiliser la fonction explode de php ?