31-05-18, 02:46 AM
(آخر تعديل لهذه المشاركة : 31-05-18, 02:49 AM {2} بواسطة Rabeea Qbaha.)
السلام عليكم
محتاج اظهر الاتي من قاعده البيانات
اللاعبون الذين لعبوا نصف أو أكثر من الألعاب الموجوده في جدول GameType، دعنا نفترض أن لدينا 6 ألعاب مختلفة في جدول "GameType" ... لذلك أريد عرض كل اللاعبين الذين لعبوا 3 ألعاب أو أكثر.
الفكره هي نقوم بجلب عدد الاسماء المختلفه للالعاب من جدول GameType
وعدد الاسماء المختلفه للالعاب من جدول PlayerInAGame لكل لاعب
و ناخذ جميع اللاعبين الذين لعبو اكثر من نصف الالعاب.
الرجاء التعديل على حلي .
هذا حلي الى الان :
PHP كود :
SELECT dbo.Player.ID, dbo.Player.surName, count(DISTINCT dbo.PlayerInAGame.gameTypeName) AS games_played, count(DISTINCT dbo.Game.gameTypeName) AS games_count
FROM dbo.Player INNER JOIN
dbo.PlayerInAGame ON dbo.Player.ID = dbo.PlayerInAGame.playerID INNER JOIN
dbo.Game ON dbo.PlayerInAGame.gameTypeName = dbo.Game.gameTypeName AND dbo.PlayerInAGame.gameDateTime = dbo.Game.gameStartDateTime
GROUP BY dbo.Player.ID, dbo.Player.surName, dbo.Game.DealerInGame
اريد الحل كالاتي :
PHP كود :
ID surName number of games played
d1 test1 3
d2 test2 4
d3 test3 3
d4 test4 6
هذه هي الجداول :
PHP كود :
create table Dealer
(
number int identity(1000,1) primary key,
firstName nvarchar(20) not null,
surName nvarchar(20) not null,
birthDate date not null,
startWorkingDate date not null,
ID char(9) check(ID like replicate('[0-9]',9)) not null unique,
check(datediff(year,birthDate,startWorkingDate)>=24)
)
create table GameType
(
name nvarchar(20) primary key,
description nvarchar(20) not null,
minimumPlayers tinyint check (minimumPlayers > 0) not null,
maximumPlayers tinyint check (maximumPlayers > 0) not null,
check(minimumPlayers <= maximumPlayers)
)
create table Game
(
gameTypeName nvarchar(20) references GameType(name) on delete cascade,
gameStartDateTime datetime,
gameEndTime time,
DealerInGame int not null references Dealer(number),
primary key(gameTypeName,gameStartDateTime)
)
create table Player
(
ID char(9) primary key,
firstName nvarchar(20) not null,
surName nvarchar(20) not null,
city nvarchar(20) not null,
birthDate date check(datediff(year,birthDate,getdate())>=18) not null,
preferred nvarchar(20) references GameType(name) on delete set null
)
create table PlayerInAGame
(
playerID char(9) references Player(ID),
gameTypeName nvarchar(20),
gameDateTime datetime,
betAmount int check(betAmount>0) not null,
winLosAmount int,
check((winLosAmount = -betAmount) or (winLosAmount>=betAmount)),
foreign key(gameTypeName,gameDateTime) references
Game(gameTypeName,gameStartDateTime), primary
key(playerID,gameTypeName,gameDateTime) )
create table PlayerDealerRelation
(
dealerNumber int references Dealer(number) on delete cascade,
playerID char(9) references Player(ID),
relationType char(1) check(relationType in ('P','G','B','C','U','N')),
primary key(dealerNumber,playerID)
)