IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

[SQLite] Requete SQL


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut [SQLite] Requete SQL
    Bonjour à tous,

    Je cherche à faire une requête SQL sous SQLite.
    Une petite explication en texte :
    J'ai plusieurs tables (physiques) ayant des nombres de places possibles différentes (ex : table A 10 places, table B 8 places, table C 9 places...)
    J'ai des joueurs positionnés sur ces différentes tables.

    Je cherche à distribuer ces joueurs équitablement sur ces tables, pour ce faire je dois connaitre :
    - le nom ou l'id de la Table la plus remplie ?
    - le nom ou l'id de la Table la moins remplie ?
    - le nombre de joueurs sur la table X ?

    Voici mes Tables (de données ce coup ci ) :

    Joueurs :
    --------------
    Id_Joueurs
    Nom_Joueurs
    Prénom_Joueurs

    Tables :
    --------------
    Id_Tables
    Nom_Tables
    NbrePlaces_Tables

    Positions :
    --------------
    Id_Positions
    Id_Tables
    Numero_Positions
    Id_Joueurs
    Si vous trouver que ma base est mal conçue n'hésites surtout pas à critiquer et me dire ce que je dois changer.

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Juillet 2007
    Messages : 41
    Points : 54
    Points
    54
    Par défaut
    J'ai essayé ceci :
    Pour la table TABLES, j'ai du la renommer "Board"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CREATE TABLE Board (
      id_Board       INT     NOT NULL     PRIMARY KEY,
      nom_Board      VARCHAR(50)     UNIQUE,
      nbplaces_Board INT)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE Joueurs (
      id_Joueurs     INT    NOT NULL    PRIMARY KEY,
      nom_Joueurs    VARCHAR(50),
      prenom_Joueurs VARCHAR(50),
      alias          VARCHAR(50)    UNIQUE)
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE Positions (
      id_Positions INT NOT NULL PRIMARY KEY,
      idBoard_Positions INT FOREIGN KEY REFERENCES Board(id_Board),
      Num_Positions INT,
      idJoueurs_Positions INT FOREIGN KEY REFERENCES Joueurs(id_Joueurs))
    Mais j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *** Une exception a été lancée : SQLite error
    near "FOREIGN": syntax error ***

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 920
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    -- pour les tables plus ou moins remplies et toutes les autres
    WITH
    T1 AS
    (SELECT Id_Tables, COUNT(*) AS N
     FROM   Positions),
    T2 AS
    (SELECT MAX(N) AS MX, MIN(N) AS MN
     FROM   T1)
    SELECT  T1.Id_Table, N AS NOMBRE, 'PLUS' AS Remplie 
    FROM    T1 
            INNER JOIN T2
                  ON T1.N = T2.MX
    UNION ALL
    SELECT  T1.Id_Table, N, 'MOINS' AS Remplie 
    FROM    T1 
            INNER JOIN T2
                  ON T1.N = T2.MN
    UNION ALL
    SELECT  T1.Id_Table, N, NULL AS Remplie 
    FROM    T1 
    WHERE   N NOT IN (SELECT MX
                      FROM   T2
                      UNION  ALL
                      SELECT MN
                      FROM   T2) 
    ORDER   BY NOMBRE DESC
    A +

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Citation Envoyé par Squale76 Voir le message
    Mais j'ai cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    *** Une exception a été lancée : SQLite error
    near "FOREIGN": syntax error ***
    Je ne l'ai jamais utilisé, mais en faisant une recherche rapide, il semblerait qu'SQL Lite ne gère pas les contraintes de clé étrangère, et qu'il faut passer par des triggers.

Discussions similaires

  1. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 10h31
  2. Prob de requete sql et variable
    Par agent-zaizai dans le forum ASP
    Réponses: 11
    Dernier message: 21/10/2003, 17h54
  3. requete sql
    Par autumn319 dans le forum ASP
    Réponses: 22
    Dernier message: 10/09/2003, 17h46
  4. Paramètre requete SQL (ADOQuery)
    Par GaL dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/07/2002, 12h24
  5. Resultat requete SQL
    Par PierDIDI dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/07/2002, 14h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo