Page 1 sur 1

Jointure

Posté : 15 janv. 2006, 19:02
par lecobra_20
Bonjour voilà j'aimerais récuprer des valeurs sur deux tables de données différente pourcela je saisqu'il faut utiliser les jointure mais le code que j'ai ne semble pas marché quelqu'un serait pkoi.
<?php

$base = mysql_connect ('localhost', 'root', ''); 
mysql_select_db ('espace_membre', $base);

$sql = "SELECT pseudo, messages.titre FROM membres, messages ORDER BY pseudo";

/*on oublie pas de lancer la requête (mysql_query) 
et on impose un message d'erreur si la requête 
ne se passe pas bien (or die) */
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 

while ($data = mysql_fetch_array($req)) {

/*on oublie pas de récupérer les valeurs 
qui nous intéressent ^^ */
$pseudo = $data['pseudo'];
$titre = $data['messages.titre'];

echo $pseudo.' et '.$titre;

}

?>
merci d'avance

Posté : 15 janv. 2006, 19:04
par albat
Modération :
Ne penses-tu pas que ta question aurait davantage sa place
dans le forum "SQL & Bases de données" ?... ;)

Posté : 15 janv. 2006, 19:08
par lecobra_20
oui j'en suis dsl.

Posté : 15 janv. 2006, 19:12
par albat
Peux-tu nous donner la structure de tes deux tables
et indiquer le champ commun sur lequel tu souhaites faire la jointure ?

Posté : 15 janv. 2006, 19:18
par lecobra_20
Voilà en faite je voudrais récuprer les valeurs de titre dans la table mesages et membre dans la tableconnectes
# phpMyAdmin MySQL-Dump
# version 2.2.6
# http://phpwizard.net/phpMyAdmin/
# http://www.phpmyadmin.net/ (download page)
#
# Serveur: localhost
# Généré le : Dimanche 15 Janvier 2006 à 18:17
# Version du serveur: 3.23.49
# Version de PHP: 4.2.0
# Base de données: `espace_membre`
# --------------------------------------------------------

#
# Structure de la table `connectes`
#

CREATE TABLE connectes (
  ip int(9) unsigned NOT NULL default '0',
  temps int(10) unsigned NOT NULL default '0',
  membre tinyint(1) unsigned NOT NULL default '0'
) TYPE=HEAP;
# --------------------------------------------------------

#
# Structure de la table `messages`
#

CREATE TABLE messages (
  id int(11) NOT NULL auto_increment,
  id_expediteur int(11) NOT NULL default '0',
  id_destinataire int(11) NOT NULL default '0',
  date datetime NOT NULL default '0000-00-00 00:00:00',
  titre text NOT NULL,
  message text NOT NULL,
  lu tinyint(4) NOT NULL default '0',
  PRIMARY KEY  (id)
) TYPE=MyISAM;

Posté : 15 janv. 2006, 23:17
par Cyrano
Tu n'as pas donné les bonnes tables, il en manque une et une autre n'est pas concernée: il manque la table membres.

Mais dans le principe, une jointure permet de relier les lignes d'une table à celles d'une tre sur un point commun. Le plus souvent, on va utiliser comme point de repère un identifiant dans une table qui es également présent dans l'autre table en clé étrangère.

La requête telle que tu l'as faite va faire ce qu'on appelle un produit cartésien et tu obtiendras le nombre de lignes de la première table multiplié par le nombre de ligne de la seconde.

Pour éviter ça et aucontreaire extraire le bon nombre de lignes, il faut ajouter une clause WHERE
La forme de la requête est donc la suivante:

Code : Tout sélectionner

SELECT pseudo, titre FROM membres, messages WHERE membres.id = expediteur ORDER BY pseudo;
J'ignore si les champs utilisés dans la clause WHERE sont bons ne connaissant pas la structure de la table membres, mais adaptes ce qui identifie le posteur du message dans la table messages à ce qui l'identigfie dans la table membres.