Problème jointure

Eléphant du PHP | 287 Messages

24 févr. 2009, 10:18

Bonjour à tous !
Site de photos, où j'ai créé 4 tables :
- Continent : id, continent
- Sous-continent : id, sous_continent,id_continent
- Pays : id, nom,id_sous_continent
- Photos : id_photo, id_pays, image

Je voudrai classer mes photos comme ceci :
Amérique :
- Canada
- USA

Europe :
- France
- Espagne
- ...

Actuellement je n'ai que ma liste des pays en jointure, et ça fonctionne !
Pour commencer, j'affiche mes "Continents"

Affichage continent
$continent = mysql_query("SELECT DISTINCT continent FROM continent ORDER BY continent") or die(mysql_error());
Mais insérer mes pays sous chaque continent là, je bloque

Merci pour votre aide !

ViPHP
ViPHP | 1996 Messages

24 févr. 2009, 13:56

<?php
//essaye cela

$requete = "SELECT Photos.image, Photos.id_pays, Photos.id_photos
                              Pays.id, Pays.nom, Pays.id_sous_continent
                              Sous-continent.id, Sous-continent.sous_continent, Sous-continent.id_continent
                              Continent.id, Continent.continent
                  FROM Photos, Pays, Sous-continent, Continent
                  WHERE Sous-continent.id_continent = Continent.id
                  AND Sous-continent.id = Pays.id_sous_continent
                  AND Pays.id = Photos.id_pays
                  ORDER BY Continent.continent,Sous-continent.sous_continent,Pays.nom";
?>
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 287 Messages

25 févr. 2009, 10:33

Bonjour,
J'essaye depuis hier soir, mais j'y arrive pas, au moment d'afficher le résultat j'ai une erreur :
$requete = "SELECT photos.image, photos.id_pays, photos.id_photos 
                              pays.id, pays.nom, pays.id_sous_continent 
                              sous-continent.id, sous-continent.sous_continent, sous-continent.id_continent 
                              continent.id, continent.continent 
                  FROM photos, pays, sous-continent, continent 
                  WHERE sous-continent.id_continent = continent.id 
                  AND sous-continent.id = pays.id_sous_continent 
                  AND pays.id = photos.id_pays 
                  ORDER BY continent.continent,sous-continent.sous_continent,pays.nom"; 
				  
while ($affichage = mysql_fetch_array($requete) )     
{    
	echo ''.$affichage['image'].'';
}

Mammouth du PHP | 693 Messages

25 févr. 2009, 12:38

Quelle erreur ?

Et je ne comprend pas très bien l'utilité de rajouter des chaines vides de part et d'autre de la variable...

ViPHP
ViPHP | 1996 Messages

25 févr. 2009, 15:35

Quelle est ton erreur?
Sinon utilise mysql_fetch_assoc au lieu de mysql_fetch_array. Dans ton cas ce sera plus rapide.
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 287 Messages

26 févr. 2009, 10:02

Même avec mysql_fetch_assoc j'ai ce message d'erreur :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in D:\Romuald\Travail\wamp\www\video_on_line\backoffice\nouveau_affichage_pays_photo.php on line 21
Je vous redonne mon code :
<?php

$requete = "SELECT photos.image, photos.id_pays, photos.id_photos 
                              pays.id, pays.nom, pays.id_sous_continent 
                              sous-continent.id, sous-continent.sous_continent, sous-continent.id_continent 
                              continent.id, continent.continent 
                  FROM photos, pays, sous-continent, continent 
                  WHERE sous-continent.id_continent = continent.id 
                  AND sous-continent.id = pays.id_sous_continent 
                  AND pays.id = photos.id_pays 
                  ORDER BY continent.continent,sous-continent.sous_continent,pays.nom"; 
				  
while ($affichage = mysql_fetch_assoc($requete) )     
{    
	echo ''.$affichage['image'].'';
}
	
?>
Je suis un peu perdu !!!

Mammouth du PHP | 1029 Messages

26 févr. 2009, 10:47

Bonjour,

Il faut faire un query avant le fetch_assoc
<?php

$requete = "SELECT photos.image, photos.id_pays, photos.id_photos 
                              pays.id, pays.nom, pays.id_sous_continent 
                              sous-continent.id, sous-continent.sous_continent, sous-continent.id_continent 
                              continent.id, continent.continent 
                  FROM photos, pays, sous-continent, continent 
                  WHERE sous-continent.id_continent = continent.id 
                  AND sous-continent.id = pays.id_sous_continent 
                  AND pays.id = photos.id_pays 
                  ORDER BY continent.continent,sous-continent.sous_continent,pays.nom"; 

$query = mysql_query($requete);
                  
while ($affichage = mysql_fetch_assoc($query) )     
{    
    echo ''.$affichage['image'].'';
}
    
?> 

L'expérience est la somme de toutes nos erreurs.

ViPHP
ViPHP | 3607 Messages

26 févr. 2009, 11:39

Je dirais même plus, un query associé à une gestion des erreurs:
$query = mysql_query($requete) or die("Erreur Mysql:<br />".mysql_error()."<br />requête:<br />".$requete);

Eléphant du PHP | 287 Messages

26 févr. 2009, 12:16

J'ai donc une erreur Mysql que voici.
Il faut que je regardemaes tables peut-être !
Erreur Mysql:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.id, pays.nom, pays.id_sous_continent sous-conti' at line 2

ViPHP
ViPHP | 3607 Messages

26 févr. 2009, 12:19

Me semble qu'il manque une virgule... ;)
là:
sous-continent.id, sous-continent.sous_continent, sous-continent.id_continent ,
continent.id, continent.continent