Recuperation de donnée dans 2 tables

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 : Recuperation de donnée dans 2 tables

par x@v » 24 sept. 2007, 17:56

pour fonctionner au mieux il faut préciser ta requette au risque de dépenser beaucoups de ressource:

Code : Tout sélectionner

formation.*, categorie.*
A la place de l'étoile précise tes champs...

par kweb » 24 sept. 2007, 15:25

ok,
je voudrais afficher toutes le formations en affichant que certain detail.
nom_formation
date_formation
ville_formation
txt_categorie

quelques explication :
dans la table formation, j'ai un champ qui récupère l'id d'une des catégories existante.
lorsque on consulte la liste des formations, je voudrais affiché le nom (txt_categorie) de cette formation
expl:

Code : Tout sélectionner

NOM FORMATION > DATE FORMATION > VILLE FORMATION > TXT_CATEGORIE Formation 01 > 29/10/2008 > Paris > Médical Formation 02 > 29/10/2008 > Lyon > Commercial
J'ai donc essayé sa :
<?
$sql = "
SELECT 
formation*, categorie* 
						
FROM 
formation, categorie 
			
WHERE
formation.id_categorie_formation = categorie.id_categorie
";
	
$sql_retour =  mysql_query($sql) or die (mysql_error());
	
while ($ligne = mysql_fetch_assoc($sql_retour))
{
echo $ligne['nom_formation'].'<br />';
echo $ligne['date_formation'].'<br />';
echo $ligne['ville_formation'].'<br />';
echo $ligne['txt_categorie'].'<br /><br /><hr />';
}
?>
En utilisant cette syntaxe il m'affiche 1 formation, alors que j'en ai 2 en base de donnée ???
je ne vois pas comment dire: affiche toutes les formations en indiquant a chaque fois son "txt_categorie".

Encore une fois merci de ton aide


Ouuppsss, désolé sa marche... je n'avais pas vue que l'id qu'il appelé n'existé pas !!!
encore merci

par d0m » 24 sept. 2007, 12:40

les résultats ne sont pas affichés en double, ce sont pour la requete 2 résultats différents.
ton résultat est le couple (formation, catégorie).

d'abord il faut identifier ce que tu veux pour pouvoir faire les bonnes requêtes.
- toutes les formations? toutes les catégories? toutes les formations et toutes les catégories?
- certaines formation? par catégorie? par formation?
- certaines catégories? par formation?

par kweb » 24 sept. 2007, 12:18

OK,
mais lorsque je test, il m'affiche en doublon tous les résultat ? pourquoi ?
<? 
$sql = "
	SELECT 
	formation.*, categorie.* 
			
	FROM 
	formation, categorie 
			
	ORDER 
	BY nom_formation
	";
	
$sql_retour =  mysql_query($sql) or die (mysql_error());
	
while ($ligne = mysql_fetch_assoc($sql_retour))
	{
	echo $ligne['nom_formation'].'<br />';
	echo $ligne['txt_categorie'].'<br /><br />';
	}
?>
voici le resultat :

Code : Tout sélectionner

88888 Categorie "9" 88888 Categorie "10" uuuuuuuuuuuuuuu Categorie "9" uuuuuuuuuuuuuuu Categorie "10"

par x@v » 21 sept. 2007, 12:26

si tu veux appeller un résultat dans deux tables differente il faut faire une jointure.

Code : Tout sélectionner

$sql = "SELECT formation.*, categorie.* FROM formation, categorie ORDER BY nom_formation";
ensuite ça c'est pas bon

Code : Tout sélectionner

while ($ligne = mysql_fetch_array($sql_retour))
il faut utiliser une fonction en fonction des besoins
mysql_fetch_assoc suffit largmement

par kweb » 21 sept. 2007, 11:48

C'est au niveau SQL que ca se passe, tu changes ta requete pour ajouter comme champ de résultat de ta requête le champ txt de la catégorie correspondante
Serrait il possible me montrer un exemple ? car je vois un peu flou :shock:

par d0m » 21 sept. 2007, 11:28

C'est au niveau SQL que ca se passe, tu changes ta requete pour ajouter comme champ de résultat de ta requête le champ txt de la catégorie correspondante

ou alors au niveau php, tu crées une requete SQL qui va chercher les textes et tu met dans un tableau php les textes avec comme clé l'id de la catégorie correspondante.
de ce fait tu aura le texte par :
$texte_de_la_catégorie = tab[$id_categorie];

Recuperation de donnée dans 2 tables

par kweb » 21 sept. 2007, 11:03

Slt, comme d'habitude je reviens vers vous pour avoir un peu d'aide.

J'ai créé 2 tables :

Code : Tout sélectionner

CREATE TABLE `categorie` ( `id_categorie` int(11) NOT NULL auto_increment, `txt_categorie` varchar(250) NOT NULL, KEY `id_categorie` (`id_categorie`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

Code : Tout sélectionner

CREATE TABLE `formation` ( `id_formation` int(11) NOT NULL auto_increment, `id_categorie_formation` int(11) NOT NULL, `nom_formation` varchar(250) NOT NULL, `date_formation` date NOT NULL, `ville_formation` varchar(250) NOT NULL, `pays_formation` varchar(250) NOT NULL, `publique_formation` longtext NOT NULL, `objectif_formation` longtext NOT NULL, `description_formation` longtext NOT NULL, `program_formation` longtext NOT NULL, KEY `id_formation` (`id_formation`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Dans la table formation, je récupère l'ID de la table catégorie.

Sur une des pages du site, j'affiche certaines donnée concernant la formation :
Partie de code simplifié
<?
$sql = "SELECT * FROM formation ORDER BY nom_formation";
$sql_retour =  mysql_query($sql) or die (mysql_error());

while ($ligne = mysql_fetch_array($sql_retour))
  { 
  echo $ligne['nom_formation'];
  echo $ligne['date_formation'];
  echo $ligne['ville_formation'];
  }
?>
Je voudrais faire affiché aussi, le "txt_categorie" associé a la formation.
mais je ne vois pas comment faire :?: :?:

Merci par avance de votre aide