Requête JOIN et JSON

Résolu/Fermé
greg13 - 5 mars 2019 à 20:36
 greg13 - 6 mars 2019 à 22:40
Bonjour a tous, voila je suis sur un petit projet et autant dire que je suis débutant en html, php, JS, CSS et surtout en Postgres ou je galère avec une query plus complexe d'ou ma venue ici pour demander de l'aide ^^.

Voila je vous explique, j'ai 2 tables une nommées "medias" et l'autre "playlist".
La table "medias" contient les colonnes suivante :
id  --  filepath -- type  --  height  --  width

et une table "playlist" avec ces colonnes :
id  --  screen  --  media


voila pour les 2 tables et en gros mes écrans doivent faire une requête sur playlist pour récupérer les médias (playlist>media) qu'ils ont a afficher par rapport a leur id (playlist > screen) . bien sur chaque playlist est unique est pointes vers des médias différents mais qui peuvent avoir des médias en commun.

du coup ma colonne média dans playlist et un genre de JSON simple (déclaré en jsonb) qui contient les ID des média du genre :
["10","52", "32","18"]


et je cherche a faire une requête avec un join qui me récupère tout les filepath, type, height et width
pour chaque id de média dans mon json de la playlist. donc si vous pouvez me donnée un coups de main
car je sais faire des requette avec des join simple mais avec le json au milieux ...

noté que rien est fixé je peut changer de type de donnée et les données que j'envoie mais ce json me permet en plus de pouvoir remonter les données dans un "select > option" de mon html avec un peut de JS (j'utilise du VueJS et travail beaucoup sur le dynamique avec de l'ajax).


j’espère avoir était suffisamment claire ^^
par avance merci
bye

Configuration: Windows / Chrome 72.0.3626.119

3 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
5 mars 2019 à 20:49
Bonjour,

Lorsque l'on a besoin d'effectuer des requêtes sur des données... on ne les stocke pas sous forme sérialisée ou json ....
Vu la structure de ce que tu souhaites stocker en BDD et requêter... le plus propre serait de faire une table d'association playlist_media avec les colonnes (id_playlist, id_media)
1
Merci pour la réponse, mais vue qu'il peut y avoir entre 1 et 100 media par playlist ça fonctionne comment ?


ha je viens de comprendre mais ça risque pas d’être lourd un autre table avec des données déjà présente ailleurs ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
5 mars 2019 à 21:16
ce n'est qu'une table d'association.....(de relation n<-->n )
1 Média peut être associé à N playlistes
1 Playliste peut contenir de 0 à N médias
C'est le meilleur moyen de le gérer.... surtout pour les requêtes...
0
ha seulement 2 colonne et autant de ligne que j'ai de média par playlist
0
par contre question annexe il y a un moyen de rajouter plusieurs ligne avec un INSERT ? ou je fait une querry avec de multiple insert ?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > greg13
5 mars 2019 à 21:30
INSERT INTO tatable (id_playlist, id_media ) VALUES
(1,1),
(1,2),
(1,5)

etc...
(x,n);
0
merci beaucoup je vais faire ça

merci encore
0
Bonjour , ^^
bon j'ai enfin mis en place la table d’association et j'ai une table dans le genre :

playlist_id media_id
20  66
20  65
21  63
21  62
21  61
21  57
21  56
21  55


j'ai donc mon id de ma playlist, comment récupérer tout les informations de ma table medias depuis cette table ?


Merci.
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650
Modifié le 6 mars 2019 à 21:29
Avec une jointure.
Par exemple :
SELECT *
FROM tbl_medias M
LEFT JOIN tbl_playlist P  ON P.id = M.id_playlist
0
Merci du coup j'ai obtenue une table jointe de tout sur le quelle j'ai fait un select where sur ce résultat :
SELECT * FROM (SELECT * FROM medias M
LEFT JOIN medias_playlist P ON P.media_id = m.id) AS m WHERE playlist_id=21


c'est bon ou j'ai tout faux ?

merci
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 4 650 > greg13
6 mars 2019 à 22:31
Tu peux mettre le where directement pourquoi avoir utilisé un sous select ?
0
ha oui, j'avais essayer mais j'avais une erreur du coups j'ai cherché un autre moyen mais effectivement ça fonctionne merci beaucoup je pensais pas que l'on pouvais faire un WHERE sur une résultat générés avec un JOIN. par contre j'ai un peut de mal a comprendre les notions des JOIN mais bon ^^

En tout cas merci beaucoup tu ma vraiment bien aider ! :)
0