[php/sql] afficher une sous-requête

Fermé
val 59 - 2 juin 2009 à 15:03
 val 59 - 2 juin 2009 à 16:06
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();
?>
A voir également:

9 réponses

Kentin76250 Messages postés 235 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 12 novembre 2014 5
2 juin 2009 à 15:09
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
0
oui, c'est bien cela
0
Kentin76250 Messages postés 235 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 12 novembre 2014 5
2 juin 2009 à 15:16
Juste comme ca je reflechi tkt euh le "ON" tu as essayé de le mettre en "IN"?
0
Non, c'est "ON", c'est une jointure externe.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Syntax Error !
0
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 ?
0
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'
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
2 juin 2009 à 15:52
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à.
0
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
0
Grand merci, avec 2 requêtes cela fonctionne !
0