Comment fusionner temporairement plusieurs tables dans MySQL

Marc ou Net

Membre émérite
20 Avril 2008
639
39
45
Rennes
Bonjour,
Je suis en train de développer un site pour mon usage personnel pour gérer mes biens. Rien de bien folichon, mais ça me permettra d'acheter trois ou quatre fois le même livre ou CD… Bref.
Je suis parti avec un développement PHP pour la partie HTML (avec à terme une mixité avec JavaScript) et MySQL pour la base de données. Pour éviter trop d'erreurs de faute de frappe comme ça m'arrive souvent, j'ai créé une table pour les CD achetés, et une pour les compositeurs, une pour les éditeurs… Pour les lier, j'utilise des codes. Par exemple (les données sont fictives, juste pour servir d'illustration) :
Dans la table CD achetés
Titre CDAuteurÉditeur
Best of Rock 60'DIDF,JEANJAIL

Dans la table Auteur
Code AuteurNom Auteur
DIDFDidier François
JEANJean Bertrand

Dans la table Éditeur
Code ÉditeurNom Éditeur
JAILJason Ilumi

Vous avez compris l'idée. Les liens, je les fais dans mon code PHP. C'est un peu fastidieux, mais facile à faire. Le problème, c'est que si les premiers codes sont faits à la main et facilement reconnaissables grâce à des moyens mnémotechniques, mon code PHP (pour le simplifier) en crée de manière aléatoire. De plus, il ne me sera pas facile de demander à faire un affichage trié autrement que par le nom du CD.

Je voudrais savoir, si MySQL peut faire ces liens tout seul, et s'il est possible de créer une table temporaire (le temps de l'affichage des données) gérée par MySQL et PHP qui regroupe les données décodées ?
 

nicovapp

Nouveau membre
14 Janvier 2021
9
2
42
Bonjour,
Je suis en train de développer un site pour mon usage personnel pour gérer mes biens. Rien de bien folichon, mais ça me permettra d'acheter trois ou quatre fois le même livre ou CD… Bref.
Je suis parti avec un développement PHP pour la partie HTML (avec à terme une mixité avec JavaScript) et MySQL pour la base de données. Pour éviter trop d'erreurs de faute de frappe comme ça m'arrive souvent, j'ai créé une table pour les CD achetés, et une pour les compositeurs, une pour les éditeurs… Pour les lier, j'utilise des codes. Par exemple (les données sont fictives, juste pour servir d'illustration) :
Dans la table CD achetés
Titre CDAuteurÉditeur
Best of Rock 60'DIDF,JEANJAIL

Dans la table Auteur
Code AuteurNom Auteur
DIDFDidier François
JEANJean Bertrand

Dans la table Éditeur
Code ÉditeurNom Éditeur
JAILJason Ilumi

Vous avez compris l'idée. Les liens, je les fais dans mon code PHP. C'est un peu fastidieux, mais facile à faire. Le problème, c'est que si les premiers codes sont faits à la main et facilement reconnaissables grâce à des moyens mnémotechniques, mon code PHP (pour le simplifier) en crée de manière aléatoire. De plus, il ne me sera pas facile de demander à faire un affichage trié autrement que par le nom du CD.

Je voudrais savoir, si MySQL peut faire ces liens tout seul, et s'il est possible de créer une table temporaire (le temps de l'affichage des données) gérée par MySQL et PHP qui regroupe les données décodées ?
Salut les jointures en mysql pourraient être ta solution ? https://sql.sh/cours/jointures Normalement toutes tes tables on un id ?

Pour te donné un exemple ma table voiture contient :
id id_model id_marque
1 1 1

La table model
id model
1 m3

la table marque
id marque
1 bmw

du coup tu fais une jointure (j'utilise inner join mais left join ou right join sont aussi utilisable)
select * from voiture
inner join model as model.id = voiture.id_model
inner join marque as marque.id = voiture.id_marque

tu devrais avoir en gros un résultat : 1 m3 bmw

Voilà si ça peux t'aider
 
  • J’aime
Réactions: touba

Marc ou Net

Membre émérite
20 Avril 2008
639
39
45
Rennes
Salut les jointures en mysql pourraient être ta solution ? https://sql.sh/cours/jointures Normalement toutes tes tables on un id ?

[…]

Voilà si ça peux t'aider
En effet, c'est plus qu'intéressant, parce que moi je le faisait à la main. Mais j'ai deux question sur les jointures :
  1. Est-ce que ça fonctionne même quand il y a plusieurs code dans le même champ ? Dans mon cas, il peu arriver qu'il y ai plusieurs auteurs à un livre.
  2. Est-ce que le résultat final peut-être trié selon les désirs de l'utilisateur une fois les données "jointes" ?
Sinon, je fonce sur ton lien pour m'y informer.
 

nicovapp

Nouveau membre
14 Janvier 2021
9
2
42
En effet, c'est plus qu'intéressant, parce que moi je le faisait à la main. Mais j'ai deux question sur les jointures :
  1. Est-ce que ça fonctionne même quand il y a plusieurs code dans le même champ ? Dans mon cas, il peu arriver qu'il y ai plusieurs auteurs à un livre.
  2. Est-ce que le résultat final peut-être trié selon les désirs de l'utilisateur une fois les données "jointes" ?
Sinon, je fonce sur ton lien pour m'y informer.
1 - oui mais plus délicat
2- oui car tu peux passer en paramètre un order by asc ou desc pour trier alphabétiquement croissant et décroissant

Bon je suis désolé pour la première réponse mais tu peux sinon faire dans ta table les multi auteur a voir.