Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/10/2011, 06h40   #1
Membre du Club
 
Inscription : février 2007
Messages : 102
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : février 2007
Messages : 102
Points : 48
Points : 48
Par défaut Plusieurs colonnes au lieu de plusieurs lignes

Bonjour

Je développe un programme de tennis de table.
Chaque saison est coupée en deux par deux phases. Chaque phase dure 4 mois et 8 mois. A la fin de chaque phase, une dérive est appliquée, chaque joueur perdra alors le nombre de points de la dérive.
J'ai deux tables (entre autres mais je ne montre que celles-ci) :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
CREATE TABLE TSeason (
  idSeason INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  StartYear SMALLINT UNSIGNED NOT NULL,
  PRIMARY KEY(idSeason)
)
 
CREATE TABLE TPhase (
  idPhase INTEGER NOT NULL AUTO_INCREMENT,
  idSeason INTEGER UNSIGNED NOT NULL,
  BeginDate DATE NULL,
  EndDate DATE NULL,
  Drift DOUBLE NULL,
  PhaseNumber SMALLINT NOT NULL,
  PRIMARY KEY(idPhase),
  INDEX TPhase_FKIndex1(idSeason)
);
L'ID de chaque saison est donc référencée par deux phases (PhaseNumber = 1 ou 2).

Je cherche à faire une requête telle qu'elle me retourne chaque saison avec ses deux dérives. Je ne veux pas plusieurs ligne car la gestion des listes des saisons (une ligne de la liste par record) dans le programme devient beaucoup plus compexe si je dois fusionner plusieurs lignes.
Ma table TPhase doit rester telle quelle car chaque match est assigné à une phase.

Je crois qu'on peut faire des selects dans des select mais je ne trouve pas la syntaxe...
Vous avez une idée ?
Feneck91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 09h16   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 328
Points : 18 328
Envoyer un message via MSN à CinePhil
Citation:
L'ID de chaque saison est donc référencée par deux phases (PhaseNumber = 1 ou 2).

Je cherche à faire une requête telle qu'elle me retourne chaque saison avec ses deux dérives.
Dérive = phase ?

Quel est ton SGBD ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT s.idSeason, s.StartYear,
  p1.idPhase AS idPhase1,
  p1.BeginDate AS BeginDate_Phase1,
  p1.EndDate AS EndDate_Phase1,
  p1.Drift AS Drift_Phase1,
  p2.idPhase AS idPhase2,
  p2.BeginDate AS BeginDate_Phase2,
  p2.EndDate AS EndDate_Phase2,
  p2.Drift AS Drift_Phase2
FROM TSeason s
INNER JOIN TPhase p1 
  ON p1.idSeason = s.idSeason
  AND p1.PhaseNumber = 1
INNER JOIN TPhase p2
  ON p2.idSeason = s.idSeason
  AND p2.PhaseNumber = 2
ORDER BY s.StartYear
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/10/2011, 10h47   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
C'est du MySQL vu la syntaxe profondément débile du CREATE TABLE qui mélange logique et physique (INDEX).

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 11h11   #4
Membre du Club
 
Inscription : février 2007
Messages : 102
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : février 2007
Messages : 102
Points : 48
Points : 48
La base de données est en SQLite3, la syntaxe est juste faite pour faire comprendre mon besoin, elle a été générée par DBDesigner mais tel quelle ça ne fonctionne pas sour SQLite3
La syntaxe qui fonctionne est celle-ci :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        CREATE TABLE TSeason (
          idSeason INTEGER PRIMARY KEY AUTOINCREMENT,
          StartYear INTEGER NOT NULL
        );
        CREATE TABLE TPhase (
          idPhase INTEGER PRIMARY KEY AUTOINCREMENT,
          idSeason INTEGER NOT NULL,
          PhaseNumber SMALLINT NOT NULL,
          BeginDate DATE NOT NULL,
          EndDate DATE NOT NULL,
          Drift DOUBLE NULL,
          FOREIGN KEY(idSeason)
            REFERENCES TSeason(idSeason)
              ON DELETE CASCADE
              ON UPDATE CASCADE
        );
Dérive = phase ? Non, dans chaque phase, il y a une dérive, et une saison est composée de deux phases.
Chaque match joué est associé à une phase. La question n'étais pas là....

Merci d'avoir déplacé cette discussion et désolée de l'avoir mal placée.
Feneck91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 13h02   #5
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Mais la réponse de CinePhil doit répondre a votre besoin non ?
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/10/2011, 14h10   #6
Membre du Club
 
Inscription : février 2007
Messages : 102
Détails du profil
Informations personnelles :
Âge : 41

Informations forums :
Inscription : février 2007
Messages : 102
Points : 48
Points : 48
Je suis désolé, je n'avais pas vu la réponse... et en effet un ENORME merci pour cette réponse qui fonctionne super bien !!!
Feneck91 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h45.


 
 
 
 
Partenaires

Hébergement Web