[php/sql] afficher une sous-requête
val 59
-
val 59 -
val 59 -
Bonjour,
Merci à ceux qui liront ceci
Voici mon problème
J'ai une BDD de livres avec (entre autres) 2 tables :
book
qui contient le champ 'Title' et 'Country' correspondant à un nombre
country
qui contient le champ 'Country' (correspondant au même nombre que ci-dessus) et 'name' qui contient le nom du pays
Ce qui donne ceci :
LIVRE
cuisine chinoise 123
cuisine grecque 124
COUNTRY
123 Chine
124 Grèce
Je cherche à afficher le nom du pays lors de ma requête, mais je n'y arrive pas...,la case reste blanche...
Voici mon code :
<?php
mysql_connect("127.0.0.1", "root", "");
mysql_select_db("autourdumonde");
$reponse = mysql_query("SELECT * FROM LIVRE LIMIT 0, 100") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<?php
$pays = mysql_query("SELECT book.Country, country.Country, country.Name as 'name' FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
while ($nompays = mysql_fetch_array($pays) )
?>
<strong><FONT SIZE=3><?php echo $donnees['Title']; ?></font></strong>
<strong>Pays</strong> : <?php echo $nompays['name']; ?><br />
<?php
}
mysql_close();
?>
Merci à ceux qui liront ceci
Voici mon problème
J'ai une BDD de livres avec (entre autres) 2 tables :
book
qui contient le champ 'Title' et 'Country' correspondant à un nombre
country
qui contient le champ 'Country' (correspondant au même nombre que ci-dessus) et 'name' qui contient le nom du pays
Ce qui donne ceci :
LIVRE
cuisine chinoise 123
cuisine grecque 124
COUNTRY
123 Chine
124 Grèce
Je cherche à afficher le nom du pays lors de ma requête, mais je n'y arrive pas...,la case reste blanche...
Voici mon code :
<?php
mysql_connect("127.0.0.1", "root", "");
mysql_select_db("autourdumonde");
$reponse = mysql_query("SELECT * FROM LIVRE LIMIT 0, 100") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<?php
$pays = mysql_query("SELECT book.Country, country.Country, country.Name as 'name' FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
while ($nompays = mysql_fetch_array($pays) )
?>
<strong><FONT SIZE=3><?php echo $donnees['Title']; ?></font></strong>
<strong>Pays</strong> : <?php echo $nompays['name']; ?><br />
<?php
}
mysql_close();
?>
A voir également:
- [php/sql] afficher une sous-requête
- Afficher appdata - Guide
- Easy php - Télécharger - Divers Web & Internet
- Afficher taille dossier windows - Guide
- Windows 11 afficher d'autres options - Guide
- Afficher mot de passe wifi android - Guide
9 réponses
bonjour,
Une question tu veux afficher quoi à l'arrivé
tu veux les pays des livres ?? je dois commencer a fatiguer ^^
je fais une pose dans mon boulot donc va y je vais voir sauf si plus fort arrive ^^
kent'z
Une question tu veux afficher quoi à l'arrivé
tu veux les pays des livres ?? je dois commencer a fatiguer ^^
je fais une pose dans mon boulot donc va y je vais voir sauf si plus fort arrive ^^
kent'z
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour
Je n'ai pas cherché à tout comprendre, mais..
Dans le as 'name' il me semble bien qu'il ne faut pas d'apostrophes mais des accents graves ou rien du tout : as `name` ou as name . Je suis étonné que tu n'aies pas d'erreur à ce niveau
Ton while ($nompays = mysql_fetch_array($pays) ) devrait être suivi d'une accolade { qui se referme après l'affichage du nom de pays. D'ailleurs, ce devrait être un if plutôt qu'un while, tu ne devrais avoir qu'un seul pays possible, donc pas de boucle, non ?
Je n'ai pas cherché à tout comprendre, mais..
Dans le as 'name' il me semble bien qu'il ne faut pas d'apostrophes mais des accents graves ou rien du tout : as `name` ou as name . Je suis étonné que tu n'aies pas d'erreur à ce niveau
Ton while ($nompays = mysql_fetch_array($pays) ) devrait être suivi d'une accolade { qui se referme après l'affichage du nom de pays. D'ailleurs, ce devrait être un if plutôt qu'un while, tu ne devrais avoir qu'un seul pays possible, donc pas de boucle, non ?
J'ai modifié mon code ainisi :
<?php
mysql_connect("127.0.0.1", "root", "");
mysql_select_db("autourdumonde");
$reponse = mysql_query("SELECT * FROM book LIMIT 0, 100") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<?php
$pays = mysql_query("SELECT book.Country, country.Country, country.Name as name FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
if ($nompays = mysql_fetch_array($pays) )
?>
<strong><FONT SIZE=3><?php echo $donnees['Title']; ?></font></strong>
<strong>Pays</strong> : <?php echo $nompays['name']; ?><br />
<?php
}
mysql_close();
?>
Cela affiche maintenant un nom de pays, mais toujours le même, à savoir le 1er de la table 'country'
<?php
mysql_connect("127.0.0.1", "root", "");
mysql_select_db("autourdumonde");
$reponse = mysql_query("SELECT * FROM book LIMIT 0, 100") or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse) )
{
?>
<?php
$pays = mysql_query("SELECT book.Country, country.Country, country.Name as name FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
if ($nompays = mysql_fetch_array($pays) )
?>
<strong><FONT SIZE=3><?php echo $donnees['Title']; ?></font></strong>
<strong>Pays</strong> : <?php echo $nompays['name']; ?><br />
<?php
}
mysql_close();
?>
Cela affiche maintenant un nom de pays, mais toujours le même, à savoir le 1er de la table 'country'
Sers-toi d'une jointure.
$query = ' SELECT Title, Country, name FROM book JOIN country USING(Country) ORDER BY name, Title'; $reponse = mysql_query($sql) or exit(mysql_error()); $name = ''; while( $donnees = mysql_fetch_array($reponse) ) { if( $donnees['country'] != $pays ) { $name = $donnees['name']; echo '<h3>' . $pays . '</h3>'; } echo $donnees['Title']; }Par contre nomme autrement les champs et tables, tu as trop de risque de confusion là.
OK
Tu veux le faire en deux requêtes ou en une seule ? Car si tu le fais en deux requêtes, tu n'a pas besoin de jointure, il suffit de faire comme 2ème requête :
$pays = mysql_query("SELECT Name FROM country WHERE Country = $donnees[Country]") or die(mysql_error());
Pour le faire en 1 seule requête, je ne suis pas assez sûr de moi pour l'écrire sans faire d'essais et je n'ai pas le temps de créer les tables, mais ça doit ressembler à
$pays = mysql_query("SELECT book.Title as titre, book.Country, country.Country, country.Name as name FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
et là c'est bien un while qu'il faut derrière car tu as plusieurs réponses
Tu veux le faire en deux requêtes ou en une seule ? Car si tu le fais en deux requêtes, tu n'a pas besoin de jointure, il suffit de faire comme 2ème requête :
$pays = mysql_query("SELECT Name FROM country WHERE Country = $donnees[Country]") or die(mysql_error());
Pour le faire en 1 seule requête, je ne suis pas assez sûr de moi pour l'écrire sans faire d'essais et je n'ai pas le temps de créer les tables, mais ça doit ressembler à
$pays = mysql_query("SELECT book.Title as titre, book.Country, country.Country, country.Name as name FROM book LEFT JOIN country ON book.Country = country.Country") or die(mysql_error());
et là c'est bien un while qu'il faut derrière car tu as plusieurs réponses