2010-07-13 4 views
0

J'ai la structure de tableau ci-dessous, A - B représente un < A peut avoir de nombreux BUne autre question SQL rapide

User -< Computer -< ComputerConfiguration -<Benchmark>- GameVersion >- Game 

Ils sont reliés avec des clés PK int.

Un utilisateur peut avoir plusieurs ordinateurs, l'ordinateur peut avoir de nombreuses configurations, la configuration peut avoir plusieurs points de repère et de référence a FK à la version du jeu qui a FK au jeu

Comment puis-je compter un nombre total de jeux uniques pour chaque utilisateur? Puis-je compter le nombre d'ordinateurs, de tests de performance et de jeux par utilisateur - le tout en une seule requête?

+0

Je crois qu'il est préférable si vous mettez en pause votre développement et étudier un peu de SQL. Vous ne pourrez pas aller plus loin si vous avez besoin d'une base de données dans votre application. – Anax

+0

Pas de soucis mec. Je ne suis pas un total noob :) – PawelRoman

Répondre

1

Pour être 100% spécifique sur la réponse, nous aurions besoin de savoir quel DBE vous utilisez.

S'il vous plaît noter que ceci est juste un code pseudo, l'idée générale serait bien être ...

SELECT COUNT(DISTINCT Game) 
    FROM User 
INNER JOIN Computer 
    INNER JOIN ComputerConfig... 

pour répondre à la question suivante, si vous voulez que tous ces chefs d'accusation en une seule requête, vous devrez employer quelques sous-requêtes.

SELECT User, r1.ComputerCount, r2.BenchmarkCount 
    FROM User 
INNER JOIN (SELECT User as UserId, count(*) FROM User INNER JOIN Computer ON (...) GROUP BY User) as r1 ON (User.id = r1.UserId) 
INNER JOIN (SELECT User as UserId, count(Distinct Benchmark) FROM ...) as r2 ON (User.id = r2.UserId) 

... et ainsi de suite

+0

Merci. Il semble que les sous-requêtes ne sont pas nécessaires, je peux utiliser plusieurs comptes (DISTINCT) lors du regroupement par ID utilisateur et cela fonctionne très bien. – PawelRoman

+0

Parfait! Juste par curiosité, quelle base de données utilisez-vous? –