Bonjour tout le monde,
j'ai un projet de ligue de football, et j'aimerais récupérer le nombre de match null par une équipe donnée dans une seule requête donnée (si possible). Voici le schéma des tables concernées :

Table des matchs :

CREATE TABLE IF NOT EXISTS `lfb_matchs` (
  `mid` int(11) unsigned NOT NULL AUTO_INCREMENT, /* id du match */
  `did` int(11) unsigned NOT NULL DEFAULT '0', /* id du journée */
  `sid` int(10) unsigned NOT NULL DEFAULT '0', /* id du stade */
  `slug` varchar(128) DEFAULT NULL,
  `date` date NOT NULL DEFAULT '0000-00-00',
  `time` time NOT NULL DEFAULT '00:00:00',
  `tid_1` int(11) unsigned NOT NULL DEFAULT '0', /* id de l'équipe 1 */
  `tid_2` int(11) unsigned NOT NULL DEFAULT '0', /* id de l'équipe 2 */
  `rid_1` int(11) unsigned NOT NULL DEFAULT '0', /* id de l'arbitre centrale */
  `rid_2` int(11) unsigned NOT NULL DEFAULT '0', /* id du juge de touche 1 */
  `rid_3` int(11) unsigned NOT NULL DEFAULT '0', /* id du juge de touche 2 */
  `rid_4` int(11) unsigned NOT NULL DEFAULT '0', /* id du juge de touche 3 */
  `yellow_cards_distributed` int(11) NOT NULL DEFAULT '0',
  `red_cards_distributed` int(11) NOT NULL DEFAULT '0',
  `description` mediumtext,
  `pk` tinyint(1) NOT NULL DEFAULT '0',
  `pk_tid_1` int(2) NOT NULL DEFAULT '0',
  `pk_tid_2` int(2) NOT NULL DEFAULT '0',
  `created` int(11) NOT NULL DEFAULT '0',
  `changed` int(11) NOT NULL DEFAULT '0',
  `status` tinyint(1) NOT NULL DEFAULT '1',
  PRIMARY KEY (`mid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5;

Table des buts de chaque match :

CREATE TABLE IF NOT EXISTS `lfb_match_goals` (
  `mgid` int(10) unsigned NOT NULL AUTO_INCREMENT, /* id du but */
  `mid` int(10) unsigned NOT NULL DEFAULT '0', /* id du match */
  `tid` int(10) unsigned NOT NULL DEFAULT '0', /* id du équipe */
  `pid` int(10) unsigned NOT NULL DEFAULT '0', /* id du joueur */
  `time` int(3) NOT NULL DEFAULT '0',
  `created` int(11) NOT NULL DEFAULT '0',
  `changed` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`mgid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=4;

Merci d'avance pour votre aide.

7 réponses


wYm
Auteur
Réponse acceptée

La solution et bien est de créer une view qui calcule le score de chaque des deux équipes pour chaque match ^^.

Elle est vraiment très simple. réfléchis un peu!
fais un LEFT JOIN lfb_matchs
avec un WHERE mgid IS NULL AND tid1 = :id_equipe
etc ...

wYm
Auteur

mgid c'est l'id du but donc il ne peut être null ?!?!?

oui, mais quand tu fais un

SELECT * FROM lfb_matchs LEFT JOIN lfb_match_goals ON(lfb_matchs.mid = lfb_match_goals.mid)

il retournera toute les lignes de lfb_matchs avec les lignes de goals correspondant. si aucun but, tu auras ligne match, et goals avec des valeurs à Null.
exemple
id_match id_but heure_but
1 99 2013-01-08 01:02:03
2 NULL NULL
3 NULL NULL

voila c'est bien expliqué, je pense.

wYm
Auteur

Merci pour ton aide je vais essayer ça :p

wYm
Auteur

Et comment faire pour compter le nombre de match gagnés par une équipe données ?

--' tu fais un COUNT(*), dans le SELECT.