Quelle est la façon la plus optimisée?

Eléphant du PHP | 206 Messages

28 mars 2011, 18:54

Bonjour à tous,

Dans le cadre de mon projet de gestion d'une équipe de Basket, je réfléchis à ce qui est optimisable ou non (le calcul des résultats de matchs prenant énormement de ressources au niveau des requetes SQL).

Et aujourd'hui, ma question se porte sur comment je gère les joueurs qui participent à un match.
J'ai longtemps hésité entre 2 méthodes :


1 ère méthode : étant donné qu'il y a un nombre fini de joueurs qui participe à chaque match (5 titulaires et 5 remplacant pour chaque équipes) stocker cela dans ma table match, ce qui donnerait :

--
-- Structure de la table `phpl_matchs`
--

CREATE TABLE IF NOT EXISTS `phpl_matchs` (
`id
`id_equipe_dom
`id_equipe_ext
`date_reelle,
`champ_id,
`buts_dom,
`buts_ext,
`dom_j1` int(11) NOT NULL,
`dom_j2` int(11) NOT NULL,
`dom_j3` int(11) NOT NULL,
`dom_j4` int(11) NOT NULL,
`dom_j5` int(11) NOT NULL,
`ext_j1` int(11) NOT NULL,
`ext_j2` int(11) NOT NULL,
`ext_j3` int(11) NOT NULL,
`ext_j4` int(11) NOT NULL,
`ext_j5` int(11) NOT NULL,
`dom_r1` int(11) NOT NULL,
`dom_r2` int(11) NOT NULL,
`dom_r3` int(11) NOT NULL,
`dom_r4` int(11) NOT NULL,
`dom_r5` int(11) NOT NULL,
`ext_r1` int(11) NOT NULL,
`ext_r2` int(11) NOT NULL,
`ext_r3` int(11) NOT NULL,
`ext_r4` int(11) NOT NULL,
`ext_r5` int(11) NOT NULL,
dom/ext pour domicile extérieur j/r pour joueur/remplacant et le chiffre pour le poste.

Bref je trouvais donc la structure lourde, et donc je suis parti sur la méthode suivante :

2ème méthode : créer une table spécifique :

--
-- Structure de la table `phpl_ordres`
--
CREATE TABLE IF NOT EXISTS `phpl_ordres` (
`id` int(11)
`match_id` int(11) NOT NULL,
`equipe_id` int(11) NOT NULL,
`joueur_id` int(11) NOT NULL,
`poste` tinyint(4) NOT NULL,
`remp` tinyint(4) NOT NULL,
ici il y a donc une entrée pour chaque joueur pour chaque match, et on met 1 ou 0 à remp pour savoir si il est remplacant ou non.
Ce systeme nous donnera donc 20 entrées par match
.

Mais je me rend compte que ce second système m'oblige donc a des jointure lorsque je veux récupérer les joueurs qui sont sur la feuille de match, de plus lorsque le membre souhaite changer sa composition d'équipe il devras ainsi lancer 10 UPDATE. Et rajouter à cela ça fait un peu redondant..

Donc j'aimerais votre avis de codeurs avisés :D

Merci d'avance et continuer ce que vous faites sur ce forum ;)

Bonne soirée !
Cherche graphiste ou designer pour jeu en ligne de gestion d'une équipe de Basket. Projet fini N'hésitez pas à me contacter

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

29 mars 2011, 01:34

Bonjour,

Voici une proposition de conception de la base de données qui répond à tes besoins : un Match fait rencontrer 2 Equipes ayant chacune 10 joueurs (dont 5 remplaçants)
Modèle relationnel généré sous le logiciel : Workbench 5.0.30 (Pour MySQL)
Image
Voici le projet source de ce modèle sous Workbench
Bien sûr ce schéma n'est pas complet, c'est juste un premier exemple qui reflète globalement l'idée.

Après génération du script SQL équivalent à ce modèle relationnel de données, on obtient le code suivant que j'ai enrichi avec un jeu d'essai d'exemple :
-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Lun 28 Mars 2011 à 23:20
-- Version du serveur: 5.5.8
-- Version de PHP: 5.3.5

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Base de données: `basketball`
--

-- --------------------------------------------------------

--
-- Structure de la table `equipe`
--
-- Création: Mar 29 Mars 2011 à 01:16
--

CREATE TABLE IF NOT EXISTS `equipe` (
  `idEquipe` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(255) DEFAULT NULL,
  `club` varchar(255) DEFAULT NULL,
  `ville` varchar(255) DEFAULT NULL,
  `pays` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idEquipe`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=15 ;

--
-- Contenu de la table `equipe`
--

INSERT INTO `equipe` (`idEquipe`, `nom`, `club`, `ville`, `pays`) VALUES
(1, 'PROA-PARIS LEVALLOIS', 'PARIS LEVALLOIS ASSOCIATION', '92300 LEVALLOIS-PERRET', 'France'),
(2, 'PROA-CHOLET BASKET', 'CHOLET BASKET', '49300 CHOLET', 'France'),
(3, 'PROA-ASVEL BASKET', 'ASVEL BASKET', '69100 VILLEURBANNE', 'France'),
(4, 'PROA-BCM GRAVELINES DUNKERQUE GRAND LITTORAL', 'GRAVELINES GRAND FORT BCM', '59820 GRAVELINES', 'France'),
(5, 'PROA-LE MANS SARTHE BASKET', 'LE MANS SC MODERNE', '72100 LE MANS', 'France'),
(6, 'PROA-HYERES TOULON VAR BASKET', 'HYERES TOULON VAR BASKET', '83200 TOULON', 'France'),
(7, 'PROA-STRASBOURG IG', 'S.I. GRAFFENSTADEN', '67000 STRASBOURG', 'France'),
(8, 'PROA-LIMOGES CSP SASP', 'LIMOGES CSP', '87100 LIMOGES', 'France'),
(9, 'PROA-SEM ELAN SPORTIF CHALONNAIS', 'ES CHALON SUR SAONE', '71100 CHALON-SUR-SAONE', 'France'),
(10, 'PROA-SLUC NANCY BASKET PRO', 'SLUC NANCY BASKET ASSOCIATION', '54000 NANCY', 'France'),
(11, 'PROA-SAOS CHORALE DE ROANNE BASKET', 'ROANNE CHORALE', '42300 ROANNE', 'France'),
(12, 'PROA-ORLEANS LOIRET BASKET', 'ORLEANS BASKET', '45100 ORLEANS', 'France'),
(13, 'PROA-SEM ELAN BEARNAIS PAU LACQ ORTHEZ', 'ELAN BEARNAIS PAU LACQ ORTHEZ (PAU NORD EST)', '64000 PAU', 'France'),
(14, 'UNION POITIERS BASKET 86', 'UNION POITIERS BASKET 86', '86000 POITIERS', 'France');

-- --------------------------------------------------------

--
-- Structure de la table `joueur`
--
-- Création: Mar 29 Mars 2011 à 01:16
--

CREATE TABLE IF NOT EXISTS `joueur` (
  `idJoueur` int(11) NOT NULL AUTO_INCREMENT,
  `nom` varchar(45) DEFAULT NULL,
  `prenom` varchar(45) DEFAULT NULL,
  `idEquipe` int(11) NOT NULL,
  PRIMARY KEY (`idJoueur`),
  KEY `idx_Joueur_Equipe` (`idEquipe`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=141 ;

--
-- Contenu de la table `joueur`
--

INSERT INTO `joueur` (`idJoueur`, `nom`, `prenom`, `idEquipe`) VALUES
(1, 'J1', NULL, 1),
(2, 'J2', NULL, 1),
(3, 'J3', NULL, 1),
(4, 'J4', NULL, 1),
(5, 'J5', NULL, 1),
(6, 'J6', NULL, 1),
(7, 'J7', NULL, 1),
(8, 'J8', NULL, 1),
(9, 'J9', NULL, 1),
(10, 'J10', NULL, 1),
(11, 'J11', NULL, 2),
(12, 'J12', NULL, 2),
(13, 'J13', NULL, 2),
(14, 'J14', NULL, 2),
(15, 'J15', NULL, 2),
(16, 'J16', NULL, 2),
(17, 'J17', NULL, 2),
(18, 'J18', NULL, 2),
(19, 'J19', NULL, 2),
(20, 'J20', NULL, 2),
(21, 'J21', NULL, 3),
(22, 'J22', NULL, 3),
(23, 'J23', NULL, 3),
(24, 'J24', NULL, 3),
(25, 'J25', NULL, 3),
(26, 'J26', NULL, 3),
(27, 'J27', NULL, 3),
(28, 'J28', NULL, 3),
(29, 'J29', NULL, 3),
(30, 'J30', NULL, 3),
(31, 'J31', NULL, 4),
(32, 'J32', NULL, 4),
(33, 'J33', NULL, 4),
(34, 'J34', NULL, 4),
(35, 'J35', NULL, 4),
(36, 'J36', NULL, 4),
(37, 'J37', NULL, 4),
(38, 'J38', NULL, 4),
(39, 'J39', NULL, 4),
(40, 'J40', NULL, 4),
(41, 'J41', NULL, 5),
(42, 'J42', NULL, 5),
(43, 'J43', NULL, 5),
(44, 'J44', NULL, 5),
(45, 'J45', NULL, 5),
(46, 'J46', NULL, 5),
(47, 'J47', NULL, 5),
(48, 'J48', NULL, 5),
(49, 'J49', NULL, 5),
(50, 'J50', NULL, 5),
(51, 'J51', NULL, 6),
(52, 'J52', NULL, 6),
(53, 'J53', NULL, 6),
(54, 'J54', NULL, 6),
(55, 'J55', NULL, 6),
(56, 'J56', NULL, 6),
(57, 'J57', NULL, 6),
(58, 'J58', NULL, 6),
(59, 'J59', NULL, 6),
(60, 'J60', NULL, 6),
(61, 'J61', NULL, 7),
(62, 'J62', NULL, 7),
(63, 'J63', NULL, 7),
(64, 'J64', NULL, 7),
(65, 'J65', NULL, 7),
(66, 'J66', NULL, 7),
(67, 'J67', NULL, 7),
(68, 'J68', NULL, 7),
(69, 'J69', NULL, 7),
(70, 'J70', NULL, 7),
(71, 'J71', NULL, 8),
(72, 'J72', NULL, 8),
(73, 'J73', NULL, 8),
(74, 'J74', NULL, 8),
(75, 'J75', NULL, 8),
(76, 'J76', NULL, 8),
(77, 'J77', NULL, 8),
(78, 'J78', NULL, 8),
(79, 'J79', NULL, 8),
(80, 'J80', NULL, 8),
(81, 'J81', NULL, 9),
(82, 'J82', NULL, 9),
(83, 'J83', NULL, 9),
(84, 'J84', NULL, 9),
(85, 'J85', NULL, 9),
(86, 'J86', NULL, 9),
(87, 'J87', NULL, 9),
(88, 'J88', NULL, 9),
(89, 'J89', NULL, 9),
(90, 'J90', NULL, 9),
(91, 'J91', NULL, 10),
(92, 'J92', NULL, 10),
(93, 'J93', NULL, 10),
(94, 'J94', NULL, 10),
(95, 'J95', NULL, 10),
(96, 'J96', NULL, 10),
(97, 'J97', NULL, 10),
(98, 'J98', NULL, 10),
(99, 'J99', NULL, 10),
(100, 'J100', NULL, 10),
(101, 'J101', NULL, 11),
(102, 'J102', NULL, 11),
(103, 'J103', NULL, 11),
(104, 'J104', NULL, 11),
(105, 'J105', NULL, 11),
(106, 'J106', NULL, 11),
(107, 'J107', NULL, 11),
(108, 'J108', NULL, 11),
(109, 'J109', NULL, 11),
(110, 'J110', NULL, 11),
(111, 'J111', NULL, 12),
(112, 'J112', NULL, 12),
(113, 'J113', NULL, 12),
(114, 'J114', NULL, 12),
(115, 'J115', NULL, 12),
(116, 'J116', NULL, 12),
(117, 'J117', NULL, 12),
(118, 'J118', NULL, 12),
(119, 'J119', NULL, 12),
(120, 'J120', NULL, 12),
(121, 'J121', NULL, 13),
(122, 'J122', NULL, 13),
(123, 'J123', NULL, 13),
(124, 'J124', NULL, 13),
(125, 'J125', NULL, 13),
(126, 'J126', NULL, 13),
(127, 'J127', NULL, 13),
(128, 'J128', NULL, 13),
(129, 'J129', NULL, 13),
(130, 'J130', NULL, 13),
(131, 'J131', NULL, 14),
(132, 'J132', NULL, 14),
(133, 'J133', NULL, 14),
(134, 'J134', NULL, 14),
(135, 'J135', NULL, 14),
(136, 'J136', NULL, 14),
(137, 'J137', NULL, 14),
(138, 'J138', NULL, 14),
(139, 'J139', NULL, 14),
(140, 'J140', NULL, 14);

-- --------------------------------------------------------

--
-- Structure de la table `match`
--
-- Création: Mar 29 Mars 2011 à 01:16
--

CREATE TABLE IF NOT EXISTS `match` (
  `idMatch` int(11) NOT NULL AUTO_INCREMENT,
  `date` datetime DEFAULT NULL,
  `lieu` varchar(255) DEFAULT NULL,
  `idEquipe_locaux` int(11) DEFAULT NULL,
  `idEquipe_visiteurs` int(11) DEFAULT NULL,
  PRIMARY KEY (`idMatch`),
  KEY `idx_Match_Equipe1` (`idEquipe_locaux`),
  KEY `idx_Match_Equipe2` (`idEquipe_visiteurs`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

--
-- Contenu de la table `match`
--

INSERT INTO `match` (`idMatch`, `date`, `lieu`, `idEquipe_locaux`, `idEquipe_visiteurs`) VALUES
(1, '2011-03-25 20:30:00', 'SALLE PIERRE DE COUBERTIN Avenue Georges Laffond F - 75016 PARIS 16E ARRONDISSEMENT', 1, 2),
(2, '2011-04-05 20:00:00', 'ASTROBALLE 40 Avenue Marcel Cerdan F - 69100 VILLEURBANNE', 3, 4),
(3, '2011-03-26 20:00:00', 'COMPLEXE SPORTIF ANTARES 2 Avenue ANTARES F - 72100 LE MANS', 5, 6),
(4, '2011-03-26 20:00:00', 'HALL RHENUS Place de la foire Expositions F - 67000 STRASBOURG', 7, 8),
(5, '2011-03-26 20:00:00', 'LE COLISEE GRANDE SALLE Rue d Amsterdam F - 71100 CHALON-SUR-SAONE', 9, 10),
(6, '2011-03-26 20:00:00', 'HDS ANDRE VACHERESSE Rue des Vernes PARC FONTALON F - 42300 ROANNE', 11, 12),
(7, '2011-03-25 20:00:00', 'CENTRE FORMATION BASKETBALL Rue Pierre Massé F - 64000 PAU', 13, 14);

-- --------------------------------------------------------

--
-- Structure de la table `participation`
--
-- Création: Mar 29 Mars 2011 à 01:16
--

CREATE TABLE IF NOT EXISTS `participation` (
  `idMatch` int(11) NOT NULL,
  `idEquipe` int(11) NOT NULL,
  `idJoueur` int(11) NOT NULL,
  `numero` int(11) DEFAULT NULL,
  `position` enum('arrière','ailier gauche','pivot','ailier droit','meneur de jeu') DEFAULT NULL,
  `remplaçant` tinyint(1) DEFAULT '0',
  PRIMARY KEY (`idJoueur`,`idEquipe`,`idMatch`),
  KEY `idx_Participation_Joueur` (`idJoueur`),
  KEY `idx_Participation_Equipe` (`idEquipe`),
  KEY `idx_Participation_Match` (`idMatch`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Contenu de la table `participation`
--

INSERT INTO `participation` (`idMatch`, `idEquipe`, `idJoueur`, `numero`, `position`, `remplaçant`) VALUES
(1, 1, 1, NULL, 'arrière', 0),
(1, 1, 2, NULL, 'ailier gauche', 0),
(1, 1, 3, NULL, 'pivot', 0),
(1, 1, 4, NULL, 'ailier droit', 0),
(1, 1, 5, NULL, 'meneur de jeu', 0),
(1, 1, 6, NULL, 'arrière', 1),
(1, 1, 7, NULL, 'ailier gauche', 1),
(1, 1, 8, NULL, 'pivot', 1),
(1, 1, 9, NULL, 'ailier droit', 1),
(1, 1, 10, NULL, 'meneur de jeu', 1),
(1, 2, 11, NULL, 'arrière', 0),
(1, 2, 12, NULL, 'ailier gauche', 0),
(1, 2, 13, NULL, 'pivot', 0),
(1, 2, 14, NULL, 'ailier droit', 0),
(1, 2, 15, NULL, 'meneur de jeu', 0),
(1, 2, 16, NULL, 'arrière', 1),
(1, 2, 17, NULL, 'ailier gauche', 1),
(1, 2, 18, NULL, 'pivot', 1),
(1, 2, 19, NULL, 'ailier droit', 1),
(1, 2, 20, NULL, 'meneur de jeu', 1),
(2, 3, 21, NULL, 'arrière', 0),
(2, 3, 22, NULL, 'ailier gauche', 0),
(2, 3, 23, NULL, 'pivot', 0),
(2, 3, 24, NULL, 'ailier droit', 0),
(2, 3, 25, NULL, 'meneur de jeu', 0),
(2, 3, 26, NULL, 'arrière', 1),
(2, 3, 27, NULL, 'ailier gauche', 1),
(2, 3, 28, NULL, 'pivot', 1),
(2, 3, 29, NULL, 'ailier droit', 1),
(2, 3, 30, NULL, 'meneur de jeu', 1),
(2, 4, 31, NULL, 'arrière', 0),
(2, 4, 32, NULL, 'ailier gauche', 0),
(2, 4, 33, NULL, 'pivot', 0),
(2, 4, 34, NULL, 'ailier droit', 0),
(2, 4, 35, NULL, 'meneur de jeu', 0),
(2, 4, 36, NULL, 'arrière', 1),
(2, 4, 37, NULL, 'ailier gauche', 1),
(2, 4, 38, NULL, 'pivot', 1),
(2, 4, 39, NULL, 'ailier droit', 1),
(2, 4, 40, NULL, 'meneur de jeu', 1),
(3, 5, 41, NULL, 'arrière', 0),
(3, 5, 42, NULL, 'ailier gauche', 0),
(3, 5, 43, NULL, 'pivot', 0),
(3, 5, 44, NULL, 'ailier droit', 0),
(3, 5, 45, NULL, 'meneur de jeu', 0),
(3, 5, 46, NULL, 'arrière', 1),
(3, 5, 47, NULL, 'ailier gauche', 1),
(3, 5, 48, NULL, 'pivot', 1),
(3, 5, 49, NULL, 'ailier droit', 1),
(3, 5, 50, NULL, 'meneur de jeu', 1),
(3, 6, 51, NULL, 'arrière', 0),
(3, 6, 52, NULL, 'ailier gauche', 0),
(3, 6, 53, NULL, 'pivot', 0),
(3, 6, 54, NULL, 'ailier droit', 0),
(3, 6, 55, NULL, 'meneur de jeu', 0),
(3, 6, 56, NULL, 'arrière', 1),
(3, 6, 57, NULL, 'ailier gauche', 1),
(3, 6, 58, NULL, 'pivot', 1),
(3, 6, 59, NULL, 'ailier droit', 1),
(3, 6, 60, NULL, 'meneur de jeu', 1),
(4, 7, 61, NULL, 'arrière', 0),
(4, 7, 62, NULL, 'ailier gauche', 0),
(4, 7, 63, NULL, 'pivot', 0),
(4, 7, 64, NULL, 'ailier droit', 0),
(4, 7, 65, NULL, 'meneur de jeu', 0),
(4, 7, 66, NULL, 'arrière', 1),
(4, 7, 67, NULL, 'ailier gauche', 1),
(4, 7, 68, NULL, 'pivot', 1),
(4, 7, 69, NULL, 'ailier droit', 1),
(4, 7, 70, NULL, 'meneur de jeu', 1),
(4, 8, 71, NULL, 'arrière', 0),
(4, 8, 72, NULL, 'ailier gauche', 0),
(4, 8, 73, NULL, 'pivot', 0),
(4, 8, 74, NULL, 'ailier droit', 0),
(4, 8, 75, NULL, 'meneur de jeu', 0),
(4, 8, 76, NULL, 'arrière', 1),
(4, 8, 77, NULL, 'ailier gauche', 1),
(4, 8, 78, NULL, 'pivot', 1),
(4, 8, 79, NULL, 'ailier droit', 1),
(4, 8, 80, NULL, 'meneur de jeu', 1),
(5, 9, 81, NULL, 'arrière', 0),
(5, 9, 82, NULL, 'ailier gauche', 0),
(5, 9, 83, NULL, 'pivot', 0),
(5, 9, 84, NULL, 'ailier droit', 0),
(5, 9, 85, NULL, 'meneur de jeu', 0),
(5, 9, 86, NULL, 'arrière', 1),
(5, 9, 87, NULL, 'ailier gauche', 1),
(5, 9, 88, NULL, 'pivot', 1),
(5, 9, 89, NULL, 'ailier droit', 1),
(5, 9, 90, NULL, 'meneur de jeu', 1),
(5, 10, 91, NULL, 'arrière', 0),
(5, 10, 92, NULL, 'ailier gauche', 0),
(5, 10, 93, NULL, 'pivot', 0),
(5, 10, 94, NULL, 'ailier droit', 0),
(5, 10, 95, NULL, 'meneur de jeu', 0),
(5, 10, 96, NULL, 'arrière', 1),
(5, 10, 97, NULL, 'ailier gauche', 1),
(5, 10, 98, NULL, 'pivot', 1),
(5, 10, 99, NULL, 'ailier droit', 1),
(5, 10, 100, NULL, 'meneur de jeu', 1),
(6, 11, 101, NULL, 'arrière', 0),
(6, 11, 102, NULL, 'ailier gauche', 0),
(6, 11, 103, NULL, 'pivot', 0),
(6, 11, 104, NULL, 'ailier droit', 0),
(6, 11, 105, NULL, 'meneur de jeu', 0),
(6, 11, 106, NULL, 'arrière', 1),
(6, 11, 107, NULL, 'ailier gauche', 1),
(6, 11, 108, NULL, 'pivot', 1),
(6, 11, 109, NULL, 'ailier droit', 1),
(6, 11, 110, NULL, 'meneur de jeu', 1),
(6, 12, 111, NULL, 'arrière', 0),
(6, 12, 112, NULL, 'ailier gauche', 0),
(6, 12, 113, NULL, 'pivot', 0),
(6, 12, 114, NULL, 'ailier droit', 0),
(6, 12, 115, NULL, 'meneur de jeu', 0),
(6, 12, 116, NULL, 'arrière', 1),
(6, 12, 117, NULL, 'ailier gauche', 1),
(6, 12, 118, NULL, 'pivot', 1),
(6, 12, 119, NULL, 'ailier droit', 1),
(6, 12, 120, NULL, 'meneur de jeu', 1),
(7, 13, 121, NULL, 'arrière', 0),
(7, 13, 122, NULL, 'ailier gauche', 0),
(7, 13, 123, NULL, 'pivot', 0),
(7, 13, 124, NULL, 'ailier droit', 0),
(7, 13, 125, NULL, 'meneur de jeu', 0),
(7, 13, 126, NULL, 'arrière', 1),
(7, 13, 127, NULL, 'ailier gauche', 1),
(7, 13, 128, NULL, 'pivot', 1),
(7, 13, 129, NULL, 'ailier droit', 1),
(7, 13, 130, NULL, 'meneur de jeu', 1),
(7, 14, 131, NULL, 'arrière', 0),
(7, 14, 132, NULL, 'ailier gauche', 0),
(7, 14, 133, NULL, 'pivot', 0),
(7, 14, 134, NULL, 'ailier droit', 0),
(7, 14, 135, NULL, 'meneur de jeu', 0),
(7, 14, 136, NULL, 'arrière', 1),
(7, 14, 137, NULL, 'ailier gauche', 1),
(7, 14, 138, NULL, 'pivot', 1),
(7, 14, 139, NULL, 'ailier droit', 1),
(7, 14, 140, NULL, 'meneur de jeu', 1);

--
-- Contraintes pour les tables exportées
--

--
-- Contraintes pour la table `joueur`
--
ALTER TABLE `joueur`
  ADD CONSTRAINT `fk_Joueur_Equipe` FOREIGN KEY (`idEquipe`) REFERENCES `equipe` (`idEquipe`) ON DELETE NO ACTION ON UPDATE NO ACTION;

--
-- Contraintes pour la table `match`
--
ALTER TABLE `match`
  ADD CONSTRAINT `fk_Match_Equipe1` FOREIGN KEY (`idEquipe_locaux`) REFERENCES `equipe` (`idEquipe`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_Match_Equipe2` FOREIGN KEY (`idEquipe_visiteurs`) REFERENCES `equipe` (`idEquipe`) ON DELETE NO ACTION ON UPDATE NO ACTION;

--
-- Contraintes pour la table `participation`
--
ALTER TABLE `participation`
  ADD CONSTRAINT `fk_Participation_Joueur` FOREIGN KEY (`idJoueur`) REFERENCES `joueur` (`idJoueur`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_Participation_Equipe` FOREIGN KEY (`idEquipe`) REFERENCES `equipe` (`idEquipe`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `fk_Participation_Match` FOREIGN KEY (`idMatch`) REFERENCES `match` (`idMatch`) ON DELETE NO ACTION ON UPDATE NO ACTION;
Revenons aux questions que tu poses :
je veux récupérer les joueurs qui sont sur la feuille de match,
La requête SQL qui répond à cette question, liste les joueurs par équipe pour un match X donné :
SELECT e.idEquipe, e.nom, j.idJoueur, j.nom, j.prenom 
FROM participation p JOIN joueur j ON p.idJoueur = j.idJoueur JOIN equipe e ON p.idEquipe = e.idEquipe
WHERE p.idMatch=? 
ORDER BY e.nom, j.nom
Note: Les ? dans la requête sont des paramètres externes à fournir avant l'exécution.
de plus lorsque le membre souhaite changer sa composition d'équipe il devras ainsi lancer 10 UPDATE
C'est normal, car tu as 10 joueurs par équipe mais le nombre d'UPDATE effectif peut ne pas aller jusqu'à l'estimation maximale de 10, car la recomposition de l'équipe peut ne pas toucher tous les joueurs. On raisonne donc en UPDATE unitaire réalisé par la requête suivante, qui remplace un joueur par un autre pour un match X donné et une équipe Y donnée :
UPDATE participation SET idJoueur=?, numero=?, position=?, remplaçant=? WHERE idMatch=? AND idEquipe=?
Note: Les ? dans la requête sont des paramètres externes à fournir avant l'exécution.
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 206 Messages

29 mars 2011, 18:34

Tout d'abord merci de cette réponse clair et vraiment complète (c'est ce que j'aime sur ce forum).
Ce que tu décris (les tables et les requetes) c'est exactement ce que j'utilise actuellement.

Mais ce que je pensais (cf la premiere méthode que j'indique dans mon post) c'est que finalement cette table participation et bien elle pourrait etre supprimer et la liste des joueurs qui joue le match directement mis dans dans la table matchs


CREATE TABLE IF NOT EXISTS `phpl_matchs` (
`id`,
`id_equipe_dom`,
`id_equipe_ext`,
`date_reelle`,
`champ_id`,
`buts_dom`,
`buts_ext`,
`dom_j1` int(11) NOT NULL,
`dom_j2` int(11) NOT NULL,
`dom_j3` int(11) NOT NULL,
`dom_j4` int(11) NOT NULL,
`dom_j5` int(11) NOT NULL,
`ext_j1` int(11) NOT NULL,
`ext_j2` int(11) NOT NULL,
`ext_j3` int(11) NOT NULL,
`ext_j4` int(11) NOT NULL,
`ext_j5` int(11) NOT NULL,
`dom_r1` int(11) NOT NULL,
`dom_r2` int(11) NOT NULL,
`dom_r3` int(11) NOT NULL,
`dom_r4` int(11) NOT NULL,
`dom_r5` int(11) NOT NULL,
`ext_r1` int(11) NOT NULL,
`ext_r2` int(11) NOT NULL,
`ext_r3` int(11) NOT NULL,
`ext_r4` int(11) NOT NULL,
`ext_r5` int(11) NOT NULL,

Cela réduirait ainsi énormement les requetes et les jointures..
Cherche graphiste ou designer pour jeu en ligne de gestion d'une équipe de Basket. Projet fini N'hésitez pas à me contacter

Mammouth du PHP | 672 Messages

31 mars 2011, 11:04

Mais ce que je pensais (cf la premiere méthode que j'indique dans mon post) c'est que finalement cette table participation et bien elle pourrait etre supprimer et la liste des joueurs qui joue le match directement mis dans dans la table matchs
Cela réduirait ainsi énormement les requetes et les jointures..
Ca dépend...

Tu risques d'avoir besoin un jour de trouver les matches dans lesquels un joueur donné a joué ?
Genre "je veux tous les matches dans lesquels Snipy a joué" ?
=> essayes d'imaginer comment se présenteront les requêtes dans les deux cas, tu auras ta réponse :roll: