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
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
A voir également:

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
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+
0
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
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.
0
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
Re,

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+ :-)
0
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
J'essais et te tien au courant.
Merci pour ton aide.
0

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
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.
0
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
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 ! :-)
0
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
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+ :-)
0
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
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.
0
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
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.
0