Bonsoirs cher amis !
J'ai un petit problème en SQL, j'espère que vous pourrez me filer un petit coup de main.
Je travaille actuellement sur mon projet qui récupère des donnés sur des films et les stock dans ma base 'cinema' pour ensuite les ré-afficher a de futurs visiteurs. (Site de critiques sur les films, donc il me faut au moins posséder des infos)
Le problème est que la structure de ma base de données était assez mal conçu,
Je n'utilisais qu'une seule table, où chaque ligne correspondait a un film, et je pensais mettre des tableaux php (serializés?) dans les champs.
Par exemple un tableau contenant les acteurs dans le champ 'acteurs'.
Dorénavant tout a été refait suivant vos précieux conseils,
J'utilise plusieurs tables pour éviter les duplicata et autres.
Le problème est que j'ai du mal a récupérer toutes les infos pour un film par exemple, j'obtiens un nombre de résultats impressionnants
Démonstration:
SGBD: MySQL v5+ - InnoDB - UTF8
Structure de la base de données avec données d'exemples:
http://pastebin.com/BKkhKfW4
Maintenant j'effectue une requête pour récupérer des données du film portant l'ID 4:
Le serveur me retourne (1 314 total, Traitement en 0.0067 sec.)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 SELECT films.id, films.allocine, films.titre_vo, films.titre_vf, films.sortie, films.avertissement, films.duree, films.production, films.synopsis, acteurs.identite, realisateurs.identite, genres.genre, nationalites.nationalite, photos.miniature, photos.originale FROM films JOIN _acteurs ON films.id = _acteurs.film JOIN acteurs ON _acteurs.acteur = acteurs.id JOIN _realisateurs ON films.id = _realisateurs.film JOIN realisateurs ON _realisateurs.realisateur = realisateurs.id JOIN _genres ON films.id = _genres.film JOIN genres ON _genres.genre = genres.id JOIN _nationalites ON films.id = _nationalites.film JOIN nationalites ON _nationalites.nationalite = nationalites.id JOIN _photos ON films.id = _photos.film JOIN photos ON _photos.photo = photos.id WHERE films.id = 4
Plus de 1300 lignes sa fait beaucoup à traiter, surtout que je suis obligé de tout mettre dans un tableau PHP et d'eradiquer les doublons pour obtenir ce dont j'ai besoin.
En rajoutant de la meme manière les films similaires : (11 826 total, Traitement en 0.0529 sec.)
Ainsi que les tags: (94 608 total, Traitement en 1.1553 sec.)
Puis les videos: (189 216 total, Traitement en 32.0916 sec.)
Vous comprenez que cela devient vite ingérable !
Auriez vous une idée d'amélioration de ma requête de récupération de données? Pensez vous que je dois plutôt effectuer plusieurs requêtes?
Ps: Il n'y a a pas d'alias pour le moment c'est volontaire, j'effectue d'abord des tests
merci beaucoup de votre aide !
Partager