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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Récupération données issues de 3 tables d'une base de donnée

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

par Yuuki » 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.

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

par nhachet » 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 ;)

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

par Yuuki » 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

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

par nhachet » 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;

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

par Yuuki » 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