Faire une requete sur 2 tables
Résolu/Fermé
sweetmemories
Messages postés
46
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
4 mars 2011
-
31 déc. 2006 à 14:05
lefou4 Messages postés 73 Date d'inscription jeudi 21 décembre 2006 Statut Membre Dernière intervention 5 mai 2010 - 1 janv. 2007 à 23:22
lefou4 Messages postés 73 Date d'inscription jeudi 21 décembre 2006 Statut Membre Dernière intervention 5 mai 2010 - 1 janv. 2007 à 23:22
A voir également:
- Faire une requete sur 2 tables
- Comment faire une table des matières sur word - Guide
- 2 comptes whatsapp - Guide
- 2 ecran pc - Guide
- Word numéro de page 1/2 - Guide
- Gto saison 2 - Forum Cinéma / Télé
7 réponses
Thom@s
Messages postés
3412
Date d'inscription
mardi 4 mars 2003
Statut
Modérateur
Dernière intervention
28 septembre 2019
678
31 déc. 2006 à 14:50
31 déc. 2006 à 14:50
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+
sweetmemories
Messages postés
46
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
4 mars 2011
4
31 déc. 2006 à 15:57
31 déc. 2006 à 15:57
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.
Thom@s
Messages postés
3412
Date d'inscription
mardi 4 mars 2003
Statut
Modérateur
Dernière intervention
28 septembre 2019
678
31 déc. 2006 à 16:26
31 déc. 2006 à 16:26
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+ :-)
sweetmemories
Messages postés
46
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
4 mars 2011
4
31 déc. 2006 à 16:27
31 déc. 2006 à 16:27
J'essais et te tien au courant.
Merci pour ton aide.
Merci pour ton aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lefou4
Messages postés
73
Date d'inscription
jeudi 21 décembre 2006
Statut
Membre
Dernière intervention
5 mai 2010
44
31 déc. 2006 à 16:43
31 déc. 2006 à 16:43
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.
sweetmemories
Messages postés
46
Date d'inscription
dimanche 19 juin 2005
Statut
Membre
Dernière intervention
4 mars 2011
4
1 janv. 2007 à 16:54
1 janv. 2007 à 16:54
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 ! :-)
Thom@s
Messages postés
3412
Date d'inscription
mardi 4 mars 2003
Statut
Modérateur
Dernière intervention
28 septembre 2019
678
1 janv. 2007 à 16:58
1 janv. 2007 à 16:58
Re,
Bonne année à toi aussi !
Et désolé pour mon astuce, qui n'est effectivement pas très "propre", puisque pouvant facilement consommer beaucoup de ressources...
Je retiens le join, que je ne connaissais pas bien, et qui me resservira certainement :)
A+ :-)
Bonne année à toi aussi !
Et désolé pour mon astuce, qui n'est effectivement pas très "propre", puisque pouvant facilement consommer beaucoup de ressources...
Je retiens le join, que je ne connaissais pas bien, et qui me resservira certainement :)
A+ :-)
lefou4
Messages postés
73
Date d'inscription
jeudi 21 décembre 2006
Statut
Membre
Dernière intervention
5 mai 2010
44
1 janv. 2007 à 23:22
1 janv. 2007 à 23:22
Ravi de t'avoir aider.
Pour Thom@s, ta méthode n'est pas fausse. Le seul inconvénient est la consommation de ressources serveur. Ravi de t'avoir appris quelquechose pour cette nouvelle année 2007.
Et bonne année à tous.
Pour Thom@s, ta méthode n'est pas fausse. Le seul inconvénient est la consommation de ressources serveur. Ravi de t'avoir appris quelquechose pour cette nouvelle année 2007.
Et bonne année à tous.
Ssylvainsab
Messages postés
2884
Date d'inscription
samedi 29 juillet 2006
Statut
Modérateur
Dernière intervention
15 août 2020
825
1 janv. 2007 à 17:06
1 janv. 2007 à 17:06
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.