Récupération données issues de 3 tables d'une base de donnée

Eléphanteau du PHP | 11 Messages

18 avr. 2011, 14:04

Bonjour à tous,

Voilà, en cours jusqu'ici nous avions vu comment récupérer les données issues de deux tables composant une base de donnée.


Mais dans mon projet, j'ai 3 tables

- Clients
>idClients
.Nom
.Prenom
.RueNum
.CpLoc

- Reservations
>idReservations
.idVoyages
.idClients
.NbrPersonne
.Apayer

-Voyages
>idVoyages
.RefProduit
.Depart



En fait mon soucis est que je n'arrive pas à afficher ce qui se situe dans la table 'Voyages' autrement dit, je n'arrive pas à faire le lien entre les 3 tables de la base de données.

Je souhaite afficher sous un tableau, le nom, prénom, NbrPersonne, Apayer, RefProduit, Depart.

J'ai essayé le code suivant:
<?php

$result =mysql_query('SELECT * FROM Clients, Reservations, Voyages WHERE Clients.idClients = Reservations.idClients AND Reservations.idVoyages = Voyages.idVoyages') ;
	$NbrElements=mysql_num_rows($result); 
	
	if (!isset($_GET['pos'])) //si la variable n'est pas définie alors:
		{
			$_GET['pos'] =  'D';
		}
	
	elseif (isset($_GET['pos']))
			{ 
				SWITCH ($_GET['pos'])
						{
								CASE 'D': //Début
								$_SESSION['ligne'] = 0;
								break; //arrêt du case
				
								CASE 'S': //Suivant
								$_SESSION['ligne'] += 10;
								if ($_SESSION['ligne'] > $NbrElements - 10) $_SESSION['ligne'] = $NbrElements - 10;
								break;
				
								CASE 'P': //Précédent
								$_SESSION['ligne'] -= 10;
								if ($_SESSION['ligne'] < 0) $_SESSION['ligne'] = 0;
								break;
				
								CASE 'F': //Fin
								$_SESSION['ligne'] = $NbrElements - 10;					
								break;
						}
			}

?>


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
  <head>
    <meta name="generator" content="HTML Tidy for Windows (vers 11 August 2008), see http://www.w3.org">
    <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
    <title>
	clients.php
    </title>
  </head>
  <body>
<?php

	
	
	include('includes/reservations/tabtop.php'); //Début du tableau (titres)
	
	for ($i = $_SESSION['ligne']; $i <= $_SESSION['ligne'] +9; $i++)
		{
			mysql_data_seek($result,$i);
			$lineReservations =mysql_fetch_array($result);
			$idReservationsForTab = $lineReservations['idReservations'];
			
			include('includes/reservations/tabline.php'); //corps du tableau
		}
	include('includes/reservations/tabbot.php'); //fin du tableau
?>	

<center>
	<br/>
	<a href="reservations.php?pos=D"><img src="./images/btnfirst.gif"></a>
	<a href="reservations.php?pos=P"><img src="./images/btnprev.gif"></a>
	<a href="reservations.php?pos=S"><img src="./images/btnnext.gif"></a>
	<a href="reservations.php?pos=F"><img src="./images/btnend.gif"></a>
	</center>
</body>
</html> 


Et dans mon tabline:
<tr>

	<td style="width: 150px;"><?php echo $lineReservations['RefProduit'];?></td>
	<td style="width: 150px;"><?php echo $lineReservations['Nom'];?></td>
	<td style="width: 150px;"><?php echo $lineReservations['Prenom'];?></td>
	<td style="width: 150px;"><?php echo $lineReservations['Apayer'];?></td>
	
	
</tr>


Ce serait sympa de m'aider au plus vite.

Merci d'avance
Modifié en dernier par Yuuki le 18 avr. 2011, 15:32, modifié 2 fois.

Eléphant du PHP | 127 Messages

18 avr. 2011, 14:21

Que te renvoi ta requête seule (sous phpMyAdmin par exemple) ?
SELECT *
FROM Clients c
INNER JOIN Reservations r ON r.idClients = c.idClients
INNER JOIN Voyages v ON v.idVoyages = r.idVoyages;

Eléphanteau du PHP | 11 Messages

18 avr. 2011, 15:24

Bonjour nhachet,

Merci pour ta réponse, mais pourrais-tu m'expliquer ce que fais la requête que tu m'as link stp?

On m'a fournit une machine virtuelle qui me sert de serveur, j'upload mes fichiers dessus via FileZilla. Je n'ai jamais utilisé PhpMyadmin, je n'ai pas trop envie de faire des opérations que je n'ai jamais utilisé sans savoir de quoi il s'agit précisément sur cette base de donnée étant donné que c'est mon projet de fin d'étude.

Désolé je suis novice en la matière :)

Yuuki

Eléphant du PHP | 127 Messages

18 avr. 2011, 16:34

phpMyAdmin est une interface pour MySQL. Son seul rôle est de rendre les opérations courantes plus simples.

La requête de mon post est une réécriture de ta requête. Au lieu d'utiliser des jointures "à la main", elle utilise des jointures déclarées (avec INNER JOIN mais il en existe d'autres, exemple : LEFT JOIN). Il s'agit uniquement d'une requête de sélection donc aucun risque ;)

Eléphanteau du PHP | 11 Messages

18 avr. 2011, 20:19

Merci nhachet,

En fait c'est résolu, j'ai simplement testé d'afficher "Depart" qui est également dans la table Voyages, et ça fonctionne très bien.

Bizarrement le RefProduit est vide.

Merci à toi.