Page 1 sur 2

PHP / MySQL

Posté : 13 mars 2020, 12:50
par slefevre77
Bonjour,

J'essaye de faire un petit site perso et je me heurte à un problème :

J'ai une base de données MySQL comme suit :

Table 1 (films) :
id,film,acteurs,nationalite
"1","Stargate SG-1","1,2,3","1"

Table 2 (acteurs) :
id,acteur
"1","Jack O'Neill"
"2","Samantha Carter"
"3","Dr. Daniel Jackson"

Table 3 (nationalites) :
id,nationalite
"1","USA"

Comment faire ma requête pour afficher :

Film : Stargate SG-1
Acteurs : Jack O'Neill, Samantha Carter, Dr. Daniel Jackson
Nationalité : USA


Je sais faire le faire pour la Table 3 :

SELECT films.film,films.acteurs,nationalites.nationalite FROM `films`,`nationalites` WHERE films.film = "Stargate SG-1" AND films.nationalite = nationalites.id;


Ce qui donne :

Film : Stargate SG-1
Acteurs : 1,2,3
Nationalité : USA


Mais je ne sais pas comment faire pour la Table 2. :(

Est-ce que quelqu'un pourrait m'expliquer ? #-o

Par avance merci pour le temps que vous pourrez me consacrer, Sébastien.

Re: PHP / MySQL

Posté : 13 mars 2020, 15:31
par or 1
il faut une autre table filmsacteurs avec un champ idfilm et un champ idacteur. si un film a 3 acteurs, il y a 3 lignes dans la table.
pareil pour la nationalité du film si l'on veux pouvoir indiquer non pas une seule nationalité mais n nationalités.

Re: PHP / MySQL

Posté : 13 mars 2020, 16:41
par slefevre77
Merci pour ta réponse,
J'ai créé une nouvelle table :

Table 4 (filmsacteurs) :
idfilm,idacteur
"1","1"
"1","2"
"1","3"

Mais comment constituer ma requête ?

Re: PHP / MySQL

Posté : 13 mars 2020, 17:13
par or 1
comme pour SELECT films.film,films.acteurs,nationalites.nationalite FROM `films`,`nationalites` WHERE films.film = "Stargate SG-1" AND films.nationalite = nationalites.id;

Re: PHP / MySQL

Posté : 13 mars 2020, 17:34
par slefevre77
J'ai dû me tromper quelque part :

SELECT films.film,acteurs.acteur,nationalites.nationalite FROM `films`,`nationalites`,`acteurs`,`filmsacteurs` WHERE films.film = "Stargate SG-1" AND films.nationalite = nationalites.id AND films.acteurs = filmsacteurs.idacteur

Ce qui me donne 3 lignes :

Stargate SG-1 Jack O'Neill USA
Stargate SG-1 Samantha Carter USA
Stargate SG-1 Dr. Daniel Jackson USA


Et aussi un warning :

Warning: #1292 Truncated incorrect DOUBLE value: '1,2,3'


Un indice ??? :D

Re: PHP / MySQL

Posté : 13 mars 2020, 18:55
par slefevre77
Si quelqu'un a un peu de temps pour m'aider, voici ma base de données :

-- phpMyAdmin SQL Dump
-- version 4.9.2
-- https://www.phpmyadmin.net/
--
-- Hôte : localhost
-- Généré le : ven. 13 mars 2020 à 17:53
-- Version du serveur : 10.3.21-MariaDB
-- Version de PHP : 5.6.40

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données : `test`
--

-- --------------------------------------------------------

--
-- Structure de la table `acteurs`
--

CREATE TABLE `acteurs` (
`id` int(11) NOT NULL,
`acteur` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `acteurs`
--

INSERT INTO `acteurs` (`id`, `acteur`) VALUES
(1, 'Jack O\'Neill'),
(2, 'Samantha Carter'),
(3, 'Dr. Daniel Jackson');

-- --------------------------------------------------------

--
-- Structure de la table `films`
--

CREATE TABLE `films` (
`id` int(11) NOT NULL,
`film` text NOT NULL,
`acteurs` text NOT NULL,
`nationalite` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `films`
--

INSERT INTO `films` (`id`, `film`, `acteurs`, `nationalite`) VALUES
(1, 'Stargate SG-1', '1,2,3', '1');

-- --------------------------------------------------------

--
-- Structure de la table `filmsacteurs`
--

CREATE TABLE `filmsacteurs` (
`idfilm` int(11) NOT NULL,
`idacteur` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `filmsacteurs`
--

INSERT INTO `filmsacteurs` (`idfilm`, `idacteur`) VALUES
(1, 1),
(1, 2),
(1, 3);

-- --------------------------------------------------------

--
-- Structure de la table `nationalites`
--

CREATE TABLE `nationalites` (
`id` int(11) NOT NULL,
`nationalite` text NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Déchargement des données de la table `nationalites`
--

INSERT INTO `nationalites` (`id`, `nationalite`) VALUES
(1, 'USA'),
(2, 'France'),
(3, 'Italie');

--
-- Index pour les tables déchargées
--

--
-- Index pour la table `acteurs`
--
ALTER TABLE `acteurs`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `films`
--
ALTER TABLE `films`
ADD PRIMARY KEY (`id`);

--
-- Index pour la table `nationalites`
--
ALTER TABLE `nationalites`
ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT pour les tables déchargées
--

--
-- AUTO_INCREMENT pour la table `acteurs`
--
ALTER TABLE `acteurs`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;

--
-- AUTO_INCREMENT pour la table `films`
--
ALTER TABLE `films`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

--
-- AUTO_INCREMENT pour la table `nationalites`
--
ALTER TABLE `nationalites`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=4;
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Re: PHP / MySQL

Posté : 13 mars 2020, 19:32
par or 1
il faut supprimer le champ acteurs de la table films.
le champ nationalite de la table films n'a pas le bon type.

Re: PHP / MySQL

Posté : 13 mars 2020, 20:21
par slefevre77
Merci, je vais essayer

Re: PHP / MySQL

Posté : 13 mars 2020, 20:49
par slefevre77
Bon, j'ai fait les modifications mais je n'arrive pas à constituer ma requête pour obtenir :

Film : Stargate SG-1
Acteurs : Jack O'Neill, Samantha Carter, Dr. Daniel Jackson
Nationalité : USA

Re: PHP / MySQL

Posté : 13 mars 2020, 21:02
par slefevre77
SELECT films.id,films.film,acteurs.acteur,nationalites.nationalite FROM `films`,`nationalites`,`acteurs`,`filmsacteurs` WHERE films.film = "Stargate SG-1" AND acteurs.id = filmsacteurs.idacteur AND acteurs.id = filmsacteurs.idfilm AND films.nationalite = nationalites.id

Ne me remonte :

id - film - acteur - nationalite
1 - Stargate SG-1 - Jack O'Neill - USA

Re: PHP / MySQL

Posté : 13 mars 2020, 21:28
par or 1
acteurs.id = filmsacteurs.idfilm
où est la logique ?

tout peut se faire avec une seule requête mais on peut aussi en faire deux, une pour avoir les infos sur le film, une autre pour avoir les acteurs du film.

Re: PHP / MySQL

Posté : 13 mars 2020, 22:45
par slefevre77
Désolé je suis un peu perdu.

Re: PHP / MySQL

Posté : 14 mars 2020, 09:55
par slefevre77
Après une bonne nuit de sommeil j'ai ceci :

SELECT films.film,acteurs.acteur,nationalites.nationalite
FROM `films`,`acteurs`,`filmsacteurs`,`nationalites`
WHERE films.film = "Stargate SG-1"
AND filmsacteurs.idfilm = films.id
AND filmsacteurs.idacteur = acteurs.id
AND films.nationalite = nationalites.id

Ce qui me donne :

film acteur nationalite
Stargate SG-1 Jack O'Neill USA
Stargate SG-1 Samantha Carter USA
Stargate SG-1 Dr. Daniel Jackson USA

Ou :

SELECT films.film,acteurs.acteur,nationalites.nationalite
FROM `films`,`acteurs`,`filmsacteurs`,`nationalites`
WHERE films.film = "Les Visiteurs"
AND filmsacteurs.idfilm = films.id
AND filmsacteurs.idacteur = acteurs.id
AND films.nationalite = nationalites.id

film acteur nationalite
Les Visiteurs Christian Clavier France
Les Visiteurs Jean Reno France
Les Visiteurs Valérie Lemercier France
Les Visiteurs Marie-Anne Chazel France
Les Visiteurs Christian Bujeau France
Les Visiteurs Isabelle Nanty France
Les Visiteurs Didier Pain France


La requête avance mais je ne sais pas comment faire pour afficher le résultat sur une seule ligne ?

Re: PHP / MySQL

Posté : 14 mars 2020, 17:08
par j_saisrien
Salut

Un petit détail : Jack O'Neill , Samantha Carter et compagnie ne sont pas des acteurs mais des personnages, joués par des acteurs.

a+

Re: PHP / MySQL

Posté : 14 mars 2020, 18:31
par slefevre77
LOL, c'est juste pour l'exemple, j'aime bien Stargate SG-1 !

Sinon quelqu'un peut m'aider pour ma requête ?