Faire une requete sur 2 tables
Résolu
sweetmemories
Messages postés
46
Date d'inscription
Statut
Membre
Dernière intervention
-
lefou4 Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
lefou4 Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous.
J'ai besoin d'un petit coups de main ou exploter divers champs sur 2 de mes tables :
sur une table je cherche tous les joueurs qui participent a des tournois selon la date et dans la deuxieme, j'aimerai extraire leur avatar suivant leur pseudo...
Si vous avez un debut de piste merci
J'ai besoin d'un petit coups de main ou exploter divers champs sur 2 de mes tables :
sur une table je cherche tous les joueurs qui participent a des tournois selon la date et dans la deuxieme, j'aimerai extraire leur avatar suivant leur pseudo...
Si vous avez un debut de piste merci
A voir également:
- Faire une requete sur 2 tables
- Supercopier 2 - Télécharger - Gestion de fichiers
- Comment faire une table des matières sur word - Guide
- Faire 2 colonnes sur word - Guide
- 2 ecran pc - Guide
- Comment faire le 2 au carré sur clavier iphone ✓ - Forum iPhone
7 réponses
Salut !
Il faudrait être plus précis: tu peux nous donner une ébauche de code ?
Ou au moins le nom des tables, leur structure (nom des champs), et ce que tu veux faire précisément.
A+
Il faudrait être plus précis: tu peux nous donner une ébauche de code ?
Ou au moins le nom des tables, leur structure (nom des champs), et ce que tu veux faire précisément.
A+
Bonjour.
Oui voici une ebauche du code :
$tournois_req = reqmysql ("SELECT * FROM tournois WHERE date=\"$date_tournois\" ORDER BY partie ASC, joueur ASC");
include ("tableau_entete_tri.php");
while($row = mysql_fetch_object($tournois_req))
{
include("tableau_details.php");
}
Là j'ai donc tous les joueurs qui etaient présent à telle date...
Donc, à partir de là il faudrait que je fasse aussi une recherche sur la table user...
Ci dessous les tables user et tournois :
1 - user :
--
-- Structure de la table `users`
--
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`pseudo` varchar(32) NOT NULL default '',
`nom` varchar(32) NOT NULL default '',
`pass` varchar(50) NOT NULL default '',
`pass2` varchar(32) NOT NULL default '',
`grade` tinyint(1) NOT NULL default '0',
`email` varchar(40) NOT NULL default '',
`theme` varchar(20) NOT NULL default '',
`aff_news` tinyint(4) NOT NULL default '10',
`nbr_news` tinyint(4) NOT NULL default '0',
`aff_email` tinyint(1) NOT NULL default '1',
`mp_popup` tinyint(1) NOT NULL default '1',
`popup` tinyint(4) NOT NULL default '0',
`icq` varchar(9) NOT NULL default '',
`msn` varchar(40) NOT NULL default '',
`yahoom` varchar(40) NOT NULL default '',
`aim` varchar(40) NOT NULL default '',
`site` varchar(100) NOT NULL default '',
`date` varchar(10) NOT NULL default '',
`avatar` varchar(80) NOT NULL default '',
`signature` text NOT NULL,
`localisation` varchar(40) NOT NULL default '',
`flood` varchar(10) NOT NULL default '',
`nb_post` int(11) NOT NULL default '0',
`statut` tinyint(1) NOT NULL default '0',
`cle` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `pseudo` (`pseudo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
2 - tournois:
--
-- Structure de la table `tournois`
--
CREATE TABLE `tournois` (
`id` tinyint(50) NOT NULL auto_increment,
`date` date NOT NULL default '0000-00-00',
`joueur` varchar(15) collate latin1_general_ci NOT NULL default '',
`partie` varchar(5) collate latin1_general_ci NOT NULL default '',
`recave` varchar(5) collate latin1_general_ci NOT NULL default '',
`jetons` varchar(5) collate latin1_general_ci NOT NULL default '',
`classement` varchar(5) collate latin1_general_ci NOT NULL default '',
`points` varchar(5) collate latin1_general_ci NOT NULL default '',
`divers` varchar(100) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=46 ;
Alors sachant quand meme que user.pseudo est egal a tournois.joueur (exemple : le même nom toto ... )
Merci pour votre aide.
Oui voici une ebauche du code :
$tournois_req = reqmysql ("SELECT * FROM tournois WHERE date=\"$date_tournois\" ORDER BY partie ASC, joueur ASC");
include ("tableau_entete_tri.php");
while($row = mysql_fetch_object($tournois_req))
{
include("tableau_details.php");
}
Là j'ai donc tous les joueurs qui etaient présent à telle date...
Donc, à partir de là il faudrait que je fasse aussi une recherche sur la table user...
Ci dessous les tables user et tournois :
1 - user :
--
-- Structure de la table `users`
--
CREATE TABLE `users` (
`id` int(11) NOT NULL auto_increment,
`pseudo` varchar(32) NOT NULL default '',
`nom` varchar(32) NOT NULL default '',
`pass` varchar(50) NOT NULL default '',
`pass2` varchar(32) NOT NULL default '',
`grade` tinyint(1) NOT NULL default '0',
`email` varchar(40) NOT NULL default '',
`theme` varchar(20) NOT NULL default '',
`aff_news` tinyint(4) NOT NULL default '10',
`nbr_news` tinyint(4) NOT NULL default '0',
`aff_email` tinyint(1) NOT NULL default '1',
`mp_popup` tinyint(1) NOT NULL default '1',
`popup` tinyint(4) NOT NULL default '0',
`icq` varchar(9) NOT NULL default '',
`msn` varchar(40) NOT NULL default '',
`yahoom` varchar(40) NOT NULL default '',
`aim` varchar(40) NOT NULL default '',
`site` varchar(100) NOT NULL default '',
`date` varchar(10) NOT NULL default '',
`avatar` varchar(80) NOT NULL default '',
`signature` text NOT NULL,
`localisation` varchar(40) NOT NULL default '',
`flood` varchar(10) NOT NULL default '',
`nb_post` int(11) NOT NULL default '0',
`statut` tinyint(1) NOT NULL default '0',
`cle` varchar(40) NOT NULL default '',
PRIMARY KEY (`id`),
UNIQUE KEY `pseudo` (`pseudo`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
2 - tournois:
--
-- Structure de la table `tournois`
--
CREATE TABLE `tournois` (
`id` tinyint(50) NOT NULL auto_increment,
`date` date NOT NULL default '0000-00-00',
`joueur` varchar(15) collate latin1_general_ci NOT NULL default '',
`partie` varchar(5) collate latin1_general_ci NOT NULL default '',
`recave` varchar(5) collate latin1_general_ci NOT NULL default '',
`jetons` varchar(5) collate latin1_general_ci NOT NULL default '',
`classement` varchar(5) collate latin1_general_ci NOT NULL default '',
`points` varchar(5) collate latin1_general_ci NOT NULL default '',
`divers` varchar(100) collate latin1_general_ci NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=46 ;
Alors sachant quand meme que user.pseudo est egal a tournois.joueur (exemple : le même nom toto ... )
Merci pour votre aide.
Re,
Essaie peut-être comme ça (code à adapter) :
A+ :-)
Essaie peut-être comme ça (code à adapter) :
$req = mysql_query("SELECT * FROM tournois WHERE date=\"$date_tournois\" ORDER BY partie ASC, joueur ASC") or die (mysql_error()); while($data = mysql_fetch_array($req)) { // Pour chaque joueur présent (table tournois) $req2 = mysql_query('SELECT * FROM users WHERE pseudo="$data['joueur']" ORDER BY partie ASC, joueur ASC') or die (mysql_error()); // On recherche ses infos dans la table users $data2 = mysql_fetch_array($req2); // On affiche les informations concernant le joueur echo $data2['nom']; // Le nom du joueur echo $data2['avatar']; // Son avatar }
A+ :-)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
La méthode de Thom@s est à bannir car elle génère un très grand nombre de requête. Si la première requête génère 1000 résultats, tu as 1000 requêtes en plus...
Tu peux faire cela en une seule requête par contre évite de donner des noms identiques aux champs dans chaque table (par exemple id se retrouve dans tournois et users).
La requête (en cherchant tous les résultats) :
select * from tournois left join users on users.pseudo = tournois.joueur
Tu n'as plus qu'à rajouter tes conditions where, order et/ou limit derrière.
Par contre il risque d'y avoir un problème sur ton $row['id'] puisqu'il se retrouve dans les 2 tables. Renomme id en id_tournois et id_users.
Tu peux faire cela en une seule requête par contre évite de donner des noms identiques aux champs dans chaque table (par exemple id se retrouve dans tournois et users).
La requête (en cherchant tous les résultats) :
select * from tournois left join users on users.pseudo = tournois.joueur
Tu n'as plus qu'à rajouter tes conditions where, order et/ou limit derrière.
Par contre il risque d'y avoir un problème sur ton $row['id'] puisqu'il se retrouve dans les 2 tables. Renomme id en id_tournois et id_users.
Bonjour et merci
Exactement ce qu'il me falait lefou4 !
Meilleur voeux à tous pour cette nouvelle année 2007 et merci à tous pour votre aide ! :-)
Exactement ce qu'il me falait lefou4 !
Meilleur voeux à tous pour cette nouvelle année 2007 et merci à tous pour votre aide ! :-)
Effectivement la méthode de Thomas utilise beaucoup de ressources.
Utiliser le left join est beaucoup mieux.
Juste un conseil: utilise une jointure avec un nombre (id par exemple) plutôt qu'un texte, c'est plus rapide ;-)
Et j'ajouterais que si on n'a pas besoin de retourner des données (C'est à dire lorsque la requête n'est pas SELECT... ), il vaut mieux utiliser mysql_unbuffered_query.
Utiliser le left join est beaucoup mieux.
Juste un conseil: utilise une jointure avec un nombre (id par exemple) plutôt qu'un texte, c'est plus rapide ;-)
Et j'ajouterais que si on n'a pas besoin de retourner des données (C'est à dire lorsque la requête n'est pas SELECT... ), il vaut mieux utiliser mysql_unbuffered_query.