Page 1 sur 1

aide sur structure requete/table

Posté : 28 févr. 2008, 21:17
par Snipy
Bonjour à tous,

J'ai un petit soucis de structure de table qui comme vous me l'imaginer me contraint a des requetes impossibles...

Situation : Une table match relié à une table journée
Ensuite la table ordre qui permet d'avoir une entrée par match (ici sont stockés les id des joueurs pour chaque match que le membre veut faire jouer)
Une table joueurs avec les caracts du joueurs (id, carac1, carac2..)


Mon script permet de "lancer" le match

J'aimerais pour cela pour chaque match récuperer les caracs de chaque joueur qui participe au match (table ordres)
$sql="SELECT id_equipe_dom, id_equipe_ext, dom_joueur1,dom_joueur2,dom_joueur3,dom_joueur4,dom_joueur5,
dom_remp1, dom_remp2, dom_remp3, dom_remp4, dom_remp5, ext_joueur1, ext_joueur2, ext_joueur3, ext_joueur4, ext_joueur5,
ext_remp1, ext_remp2, ext_remp3, ext_rem4, ext_remp5 
FROM phpl_matchs
LEFT JOIN phpl_journees
ON(phpl_matchs.id_journee = phpl_journees.id),
phpl_ordres
WHERE phpl_ordres.id_match = phpl_match.id 
AND'".date('Y-m-d')."' = phpl_journees.date_prevue";
 
 $result = mysql_query($sql) or die (mysql_error());
 
 while ($row= mysql_fetch_assoc($result))
 
 {
 
 // COMMENT RECUPERER LES INFOS DES JOUEURS DE LA FEUILLE DE MATCH (dom_joueur1, ...)

   
 
 }

Comme vous le voyer c'est moche, donc j'aimerais les conseils de personnes expérimentés
Merci beaucoup !

Code : Tout sélectionner

-- Structure de la table `phpl_journees` -- CREATE TABLE `phpl_journees` ( `numero` tinyint(3) unsigned NOT NULL default '0', `date_prevue` date NOT NULL default '0000-00-00', `id` smallint(5) unsigned NOT NULL auto_increment, `id_champ` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `id_champ` (`id_champ`) ) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=19 ; -- -------------------------------------------------------- -- -- Structure de la table `phpl_matchs` -- CREATE TABLE `phpl_matchs` ( `id` mediumint(6) unsigned NOT NULL auto_increment, `id_equipe_dom` smallint(5) unsigned default NULL, `id_equipe_ext` smallint(5) unsigned default NULL, `date_reelle` datetime default NULL, `id_journee` smallint(5) unsigned default NULL, `buts_dom` smallint(4) unsigned default NULL, `buts_ext` smallint(4) unsigned default NULL, PRIMARY KEY (`id`), KEY `id_equipe_dom` (`id_equipe_dom`), KEY `id_equipe_ext` (`id_equipe_ext`), KEY `buts_dom` (`buts_dom`), KEY `buts_ext` (`buts_ext`), KEY `id_journee` (`id_journee`) ) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=77 ; -- -------------------------------------------------------- -- -- Structure de la table `phpl_ordres` -- CREATE TABLE `phpl_ordres` ( `id` int(11) NOT NULL, `id_match` int(11) NOT NULL, `dom_joueur1` tinyint(4) NOT NULL, `dom_joueur2` tinyint(4) NOT NULL, `dom_joueur3` tinyint(4) NOT NULL, `dom_joueur4` tinyint(4) NOT NULL, `dom_joueur5` tinyint(4) NOT NULL, `dom_remp1` tinyint(4) NOT NULL, `dom_remp2` tinyint(4) NOT NULL, `dom_remp3` tinyint(4) NOT NULL, `dom_remp4` tinyint(4) NOT NULL, `dom_remp5` tinyint(4) NOT NULL, `ext_joueur1` tinyint(4) NOT NULL, `ext_joueur2` tinyint(4) NOT NULL, `ext_joueur3` tinyint(4) NOT NULL, `ext_joueur4` tinyint(4) NOT NULL, `ext_joueur5` tinyint(4) NOT NULL, `ext_remp1` tinyint(4) NOT NULL, `ext_remp2` tinyint(4) NOT NULL, `ext_remp3` tinyint(4) NOT NULL, `ext_remp4` tinyint(4) NOT NULL, `ext_remp5` tinyint(4) NOT NULL, `dom_tactique` tinyint(4) NOT NULL, `ext_tactique` tinyint(4) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci; -- ---

Bonne soirée

Posté : 29 févr. 2008, 09:50
par d0m
Salut,

pour ce qui est de la table php1_ordre il est clair qu'elle soit mal conçue.
En effet il y a plusieurs champs qui sont identiques de structure : les 20 joueurs.
Il faudrait donc penser à passer ça par une association.

De plus l'association match - php1_ordre semble être 1-1.
Tu pourrais donc faire une seule table fusionnant les 2.

Code : Tout sélectionner

CREATE TABLE `phpl_matchs` ( `id` mediumint(6) unsigned NOT NULL auto_increment, `id_equipe_dom` smallint(5) unsigned default NULL, `id_equipe_ext` smallint(5) unsigned default NULL, `date_reelle` datetime default NULL, `id_journee` smallint(5) unsigned default NULL, `buts_dom` smallint(4) unsigned default NULL, `buts_ext` smallint(4) unsigned default NULL, `dom_tactique` tinyint(4) NOT NULL, `ext_tactique` tinyint(4) NOT NULL PRIMARY KEY (`id`), KEY `id_equipe_dom` (`id_equipe_dom`), KEY `id_equipe_ext` (`id_equipe_ext`), KEY `buts_dom` (`buts_dom`), KEY `buts_ext` (`buts_ext`), KEY `id_journee` (`id_journee`) ) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci AUTO_INCREMENT=77 ;
Ensuite faire une table qui ordonne les joueurs d'une équipe.
Après tout tu as déjà les identifiants des 2 équipes dans la table php1_matchs.

Code : Tout sélectionner

CREATE TABLE `phpl_equipe` ( `id` mediumint(6) unsigned NOT NULL auto_increment, `id_equipe` smallint(5) unsigned default NULL, `id_joueur` tinyint(4) NOT NULL, `ordre_entree` tinyint(4) NOT NULL, PRIMARY KEY (`id`) )
et les remplaçants tu peux mettre l'ordre commençant à 6 (nombre de joueurs titulaires +1) jusqu'à 10.
1 => joueur1
...
5 => joueur5
6 => remplaçant1
..
10 => remplaçant5

Posté : 29 févr. 2008, 12:46
par Snipy
Merci de ta réponse !

Fusionner les 2 tables est en effet assez logique,
Par contre je ne comprends pas ta derniere table, il faudrait un champ id_match, et donc pour chaque match on aurait 2 types d'entrées (car 2 équipes) mais aussi une entrée pour chaque joueur soit au final 10 entrée par équipe soit 20 entrée par match OoO

Posté : 29 févr. 2008, 13:20
par Sékiltoyai
Exactement