[RESOLU] PHP / MySQL

Mammouth du PHP | 1341 Messages

14 mars 2020, 20:17

à quoi cela servirait d'avoir une seule ligne pour le résultat de la requête ?
il est tout à fait possible d'afficher dans une page html une seule ligne avec le résultat d'une requête qui en retourne plusieurs.

Eléphanteau du PHP | 18 Messages

14 mars 2020, 23:51

Bonsoir, ne serait-ce que pour ne pas rester dans l'ignorance je souhaite savoir comment faire. 😀

Mammouth du PHP | 1341 Messages

15 mars 2020, 00:48

$acteurs = "";
while (le resultat de la requete){
$acteurs .= $variable['acteur'];
}
echo $acteurs;

Eléphanteau du PHP | 18 Messages

15 mars 2020, 01:08

Merci, je vais tester demain.

Eléphanteau du PHP | 18 Messages

15 mars 2020, 08:46

Bonjour,

Cela fonctionne, merci beaucoup !

J'obtiens le résultat sur une ligne.

Id : 1
Film : Stargate SG-1
Acteurs : Jack O'NeillSamantha CarterDr. Daniel Jackson
Nationalité : USA

Par contre comment faire pour mettre un séparateur entre les "acteurs" ? Genre : ", ".

Eléphanteau du PHP | 18 Messages

15 mars 2020, 09:14

J'ai fait ce que tu m'avais suggéré pour les nationalités, mais du coup j'ai des résultats en double.

Voici mon code :
<?php
$sql = "SELECT films.id,films.film,acteurs.acteur,nationalites.nationalite FROM films,filmsacteurs,acteurs,filmsnationalites,nationalites WHERE films.film = 'Stargate SG-1' AND filmsacteurs.idfilm = films.id AND filmsacteurs.idacteur = acteurs.id AND filmsnationalites.idfilm = films.id AND filmsnationalites.idnationalite = nationalites.id";
$result = $condbi->query($sql);
	while($data = $result->fetch_assoc()) {
		$id = $data['id'];
		$film = $data['film'];
		$acteurs .= $data['acteur'];
		$nationalite .= $data['nationalite'];
	}
?>
Id : <?php echo $id; ?><br/>
Film : <?php echo $film; ?><br/>
Acteurs : <?php echo $acteurs; ?><br/>
Nationalit&eacute; : <?php echo $nationalite; ?>
Et voici le résultat :

Id : 1
Film : Stargate SG-1
Acteurs : Jack O'NeillJack O'NeillSamantha CarterSamantha CarterDr. Daniel JacksonDr. Daniel Jackson
Nationalité : U.S.A.CanadaU.S.A.CanadaU.S.A.Canada


J'ai fait une erreur quelque part ?

Mammouth du PHP | 1341 Messages

15 mars 2020, 17:06

mieux vaux faire plus de requêtes. une manière simple : une pour les infos du film, une pour les nationalités du film, une pour les acteurs du film.

Eléphanteau du PHP | 18 Messages

15 mars 2020, 19:04

Ok pour plusieurs requêtes, par contre comment faire pour mettre un séparateur entre les "acteurs" ? Genre : ", ".

Mammouth du PHP | 1341 Messages

15 mars 2020, 19:54

comment tu as fait pour concatener des chaines, les noms des acteurs ?

Eléphanteau du PHP | 18 Messages

15 mars 2020, 20:04

J'ai fait comme tu m'as dit (enfin je pense) :

Dans des boucles :

$acteurs .= $data_acteurs['acteur'];
$nationalite .= $data_nationalites['nationalite'];

$sql_acteurs = "SELECT films.id,films.film,acteurs.acteur FROM films,filmsacteurs,acteurs WHERE films.film = 'Stargate SG-1' AND filmsacteurs.idfilm = films.id AND filmsacteurs.idacteur = acteurs.id";
$sql_nationalites = "SELECT nationalites.nationalite FROM films,filmsnationalites,nationalites WHERE films.film = 'Stargate SG-1' AND filmsnationalites.idfilm = films.id AND filmsnationalites.idnationalite = nationalites.id";
echo "$sql_acteurs <br/>";
$result_acteurs = $condbi->query($sql_acteurs);
	while($data_acteurs = $result_acteurs->fetch_assoc()) {
		$id = $data_acteurs['id'];
		$film = $data_acteurs['film'];
		$acteurs .= $data_acteurs['acteur'];
	}
echo "$sql_nationalites <br/>";
$result_nationalites = $condbi->query($sql_nationalites);
	while($data_nationalites = $result_nationalites->fetch_assoc()) {
		$nationalite .= $data_nationalites['nationalite'];
	}
?>
Id : <?php echo $id; ?><br/>
Film : <?php echo $film; ?><br/>
Acteurs : <?php echo $acteurs; ?><br/>
Nationalit&eacute; : <?php echo $nationalite; ?><br/>

Eléphanteau du PHP | 18 Messages

15 mars 2020, 21:45

Bon, je m'en suis sorti comme cela :
<?php
$id = "";
$film = "";
$acteur = "";
$nationalite = "";

$sql_acteurs = "SELECT films.id,films.film,acteurs.acteur FROM films,filmsacteurs,acteurs WHERE films.film = 'Stargate SG-1' AND filmsacteurs.idfilm = films.id AND filmsacteurs.idacteur = acteurs.id";
$sql_nationalites = "SELECT nationalites.nationalite FROM films,filmsnationalites,nationalites WHERE films.film = 'Stargate SG-1' AND filmsnationalites.idfilm = films.id AND filmsnationalites.idnationalite = nationalites.id";
echo "$sql_acteurs <br/>";
$result_acteurs = $condbi->query($sql_acteurs);
	while($data_acteurs = $result_acteurs->fetch_assoc()) {
		$id = $data_acteurs['id'];
		$film = $data_acteurs['film'];
		$acteurs .= $data_acteurs['acteur'];
		$acteurs = "$acteurs, ";
	}
echo "$sql_nationalites <br/>";
$result_nationalites = $condbi->query($sql_nationalites);
	while($data_nationalites = $result_nationalites->fetch_assoc()) {
		$nationalite .= $data_nationalites['nationalite'];
		$nationalite = "$nationalite, ";
	}
$acteurs = substr($acteurs,0,-2);
$nationalite = substr($nationalite,0,-2);
?>
Id : <?php echo $id; ?><br/>
Film : <?php echo $film; ?><br/>
Acteurs : <?php echo $acteurs; ?><br/>
Nationalit&eacute; : <?php echo $nationalite; ?><br/>
Ce qui donne :

SELECT films.id,films.film,acteurs.acteur FROM films,filmsacteurs,acteurs WHERE films.film = 'Stargate SG-1' AND filmsacteurs.idfilm = films.id AND filmsacteurs.idacteur = acteurs.id
SELECT nationalites.nationalite FROM films,filmsnationalites,nationalites WHERE films.film = 'Stargate SG-1' AND filmsnationalites.idfilm = films.id AND filmsnationalites.idnationalite = nationalites.id
Id : 1
Film : Stargate SG-1
Acteurs : Jack O'Neill, Samantha Carter, Dr. Daniel Jackson
Nationalité : U.S.A., Canada


Si quelqu'un à une idée pour améliorer la façon de faire où le code, j'aimerais faire au mieux et ne pas faire du mauvais codage !

Mammouth du PHP | 1341 Messages

15 mars 2020, 21:59


Eléphanteau du PHP | 18 Messages

16 mars 2020, 00:25

Merci pour ton aide.

Mammouth du PHP | 1645 Messages

19 mars 2020, 11:09

pour info:

tu peux utiliser les clauses GROUP BY et GROUP_CONCAT pour obtenir chaque film en une ligne

https://stackoverflow.com/questions/149 ... s-in-mysql
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone de rubik's cube