-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTeam63_M2.sql
964 lines (682 loc) · 21 KB
/
Team63_M2.sql
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
CREATE Database Milestone2
GO
CREATE PROC createAllTables
AS
CREATE TABLE SystemUser(
username Varchar(20) PRIMARY KEY ,
Password Varchar(20)
);
CREATE TABLE Stadium( -- edit the order
ID int PRIMARY KEY IDENTITY,
Name Varchar(20) UNIQUE,
Location Varchar(20),
Capacity int,
Status bit -- 0 means unavailable and 1 means available
);
CREATE TABLE StadiumManager( -- change the order
ID int PRIMARY KEY IDENTITY,
Name Varchar(20),
Stadium_ID int FOREIGN KEY REFERENCES Stadium(ID) ON UPDATE CASCADE ON DELETE CASCADE , -- staduim id instead of Manager_ID
username Varchar(20) UNIQUE FOREIGN KEY REFERENCES SystemUser(username)
);
CREATE TABLE Club(
club_ID int PRIMARY KEY IDENTITY, -- club_id instead of id
Name Varchar(20) UNIQUE,
Location Varchar(20)
);
CREATE TABLE ClubRepresentative( -- change the order
ID int PRIMARY KEY IDENTITY,
Name Varchar(20),
Club_ID int FOREIGN KEY REFERENCES Club(club_ID) ON UPDATE CASCADE ON DELETE CASCADE,
username Varchar(20) UNIQUE FOREIGN KEY REFERENCES SystemUser(username)
);
CREATE TABLE Match( -- change the order
match_ID int PRIMARY KEY IDENTITY, -- match_id instead of id
Start_Time datetime, -- start_time instead of startTime
end_time datetime , -- new att
Host_Club_ID int FOREIGN KEY REFERENCES Club(club_ID) ,
Guest_Club_ID int FOREIGN KEY REFERENCES Club(club_ID) ,
Stadium_ID int FOREIGN KEY REFERENCES Stadium(ID) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE HostRequest( -- change the order
ID int PRIMARY KEY IDENTITY,
representative_ID int FOREIGN KEY REFERENCES ClubRepresentative(ID) ,
Manager_ID int FOREIGN KEY REFERENCES StadiumManager(ID) ,
Match_ID INT FOREIGN KEY REFERENCES Match(match_ID) ON UPDATE CASCADE ON DELETE CASCADE ,
Status varchar(20)
);
CREATE TABLE Fan( --change the order
National_ID Varchar(20) PRIMARY KEY,
Name Varchar(20),
Birth_Date datetime,
Address Varchar(20),
Phone_No Varchar(20),
Status bit, --For fans, 0 means blocked and 1 means unblocked.
username Varchar(20) UNIQUE FOREIGN KEY REFERENCES SystemUser(username) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE Ticket( -- delete attrib
ID int PRIMARY KEY IDENTITY,
Status bit, -- For tickets, 0 means sold and 1 means available
Match_ID int FOREIGN KEY REFERENCES Match(match_ID) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE TicketBuyingTransactions( -- new table
fan_national_ID VARCHAR(20) FOREIGN KEY REFERENCES Fan(National_ID) ON UPDATE CASCADE ON DELETE CASCADE NOT NULL,
ticket_ID int FOREIGN KEY REFERENCES Ticket(ID) NOT NULL
);
CREATE TABLE SystemAdmin(
ID int PRIMARY KEY IDENTITY,
Name Varchar(20),
username Varchar(20) UNIQUE FOREIGN KEY REFERENCES SystemUser(username) ON UPDATE CASCADE ON DELETE CASCADE
);
CREATE TABLE SportsAssociationManager(
ID int PRIMARY KEY IDENTITY,
Name Varchar(20),
username Varchar(20) UNIQUE FOREIGN KEY REFERENCES SystemUser(username) ON UPDATE CASCADE ON DELETE CASCADE
);
GO
CREATE PROC dropAllTables
AS
DROP TABLE SportsAssociationManager
DROP TABLE SystemAdmin
DROP TABLE TicketBuyingTransactions
DROP TABLE Ticket
DROP TABLE Fan
DROP TABLE HostRequest
DROP TABLE Match
DROP TABLE ClubRepresentative
DROP TABLE Club
DROP TABLE StadiumManager
DROP TABLE Stadium
DROP TABLE SystemUser
GO
CREATE PROC dropAllProceduresFunctionsViews
AS
DROP PROCEDURE createAllTables
DROP PROCEDURE dropAllTables
DROP PROCEDURE clearAllTables
DROP VIEW allAssocManagers
DROP VIEW allClubRepresentatives
DROP VIEW allStadiumManagers
DROP VIEW allFans
DROP VIEW allMatches
DROP VIEW allTickets
DROP VIEW allCLubs
DROP VIEW allStadiums
DROP VIEW allRequests
DROP PROCEDURE addAssociationManager
DROP PROCEDURE addNewMatch
DROP VIEW clubsWithNoMatches
DROP PROCEDURE deleteMatch
DROP PROCEDURE deleteMatchesOnStadium
DROP PROCEDURE addClub
DROP PROCEDURE addTicket
DROP PROCEDURE deleteClub
DROP PROCEDURE addStadium
DROP PROCEDURE deleteStadium
DROP PROCEDURE blockFan
DROP PROCEDURE unblockFan
DROP PROCEDURE addRepresentative
DROP FUNCTION viewAvailableStadiumsOn
DROP PROCEDURE addHostRequest
DROP FUNCTION allUnassignedMatches
DROP PROCEDURE addStadiumManager
DROP FUNCTION allPendingRequests
DROP PROCEDURE acceptRequest
DROP PROCEDURE rejectRequest
DROP PROCEDURE addFan
DROP FUNCTION upcomingMatchesOfClub
DROP FUNCTION availableMatchesToAttend
DROP PROCEDURE purchaseTicket
DROP PROCEDURE updateMatchHost
DROP PROCEDURE deleteMatchesOnStadium
DROP VIEW matchesPerTeam
DROP VIEW clubsNeverMatched
DROP FUNCTION clubsNeverPlayed
DROP FUNCTION matchWithHighestAttendance
DROP FUNCTION matchesRankedByAttendance
DROP FUNCTION requestsFromClub
GO
CREATE PROC clearAllTables
AS
DELETE from SportsAssociationManager;
delete from SystemAdmin;
delete from TicketBuyingTransactions;
delete from Ticket;
delete from Fan;
delete from HostRequest;
delete from Match;
delete from ClubRepresentative;
delete from Club;
delete from StadiumManager;
delete from Stadium;
delete from SystemUser;
GO
--Hadary el brns
create View [allAssocManagers] As
select s.username , su.password , s.Name
from SportsAssociationManager s , SystemUser su
where s.username = su.username
go
create view allClubRepresentatives as
select cr.username ,su.password , cr.Name AS ClubRepresentatives, c.Name AS Clubs
from Club c ,ClubRepresentative cr , SystemUser su
where c.club_ID =cr.Club_ID and cr.username = su.username
go
create view allStadiumManagers as
select sm.username ,su.password,sm.name AS StadiumManagers ,s.name AS Stadiums
from Stadium s,StadiumManager sm , SystemUser su
where s.id=sm.Stadium_ID and sm.username = su.username
go
create view allFans as
Select su.username ,su.password , f.Name, f.National_ID, f.Birth_Date , f.Status
from fan f , SystemUser su
where f.username = su.username
go
create view allMatches as
select c1.name as HostClub ,c2.name as GuestClub , m.Start_Time
from (((Club c1 inner join Match m on c1.club_ID=m.Host_Club_ID) inner join Club c2 on c2.club_ID=m.Guest_Club_ID) )
go
create view allTickets as
select c1.name as HostClub , c2.name as GuestClub ,s.name , m.Start_Time
from Match m inner join Ticket t on m.match_ID =t.Match_ID inner join Club c1 on c1.club_ID = m.Host_Club_ID
inner join Club c2 on c2.club_ID =m.Guest_Club_ID inner join Stadium s on s.id = m.Stadium_ID
go
create view allCLubs as
select name , Location
from Club
go
create view allStadiums as
select name , location , capacity ,status
from Stadium
go
create view allRequests as
select cr.username as ClubRepresentative , sm.username as StadiumManager ,hr.status
from (( ClubRepresentative cr inner join HostRequest hr on hr.representative_ID=cr.id )
inner join StadiumManager sm on hr.Manager_ID=sm.id) , SystemUser as su1 , SystemUser as su2
where sm.username = su1.username and cr.username = su2.username
go
--mohsen
--i
CREATE PROC addAssociationManager
@AssociationManager varchar(20),
@username varchar(20),
@password varchar(20)
AS
INSERT INTO SystemUser(username,Password)
VALUES(@username,@password);
INSERT INTO SportsAssociationManager(Name,username)
VALUES(@AssociationManager,@username);
GO
--ii
CREATE PROC addNewMatch
@hostclub varchar(20),
@guestclub varchar(20),
@starttime datetime,
@endtime datetime
AS
DECLARE @hostclubid int
SELECT @hostclubid = club_ID
FROM Club
WHERE @hostclub = name
DECLARE @guestclubid int
SELECT @guestclubid = club_ID
FROM Club
WHERE @guestclub = name
INSERT INTO Match (Guest_Club_ID,Host_Club_ID,Start_Time,end_time,Stadium_ID)
VALUES(@guestclubid,@hostclubid,@starttime,@endtime,NULL);
GO
--iii
CREATE VIEW clubsWithNoMatches AS
SELECT c.name
FROM Club c
WHERE c.name NOT IN (SELECT c1.Name
FROM Club c1, Match m
WHERE c1.club_ID = m.Host_Club_ID OR c1.club_ID = m.Guest_Club_ID);
GO
--iv
CREATE PROC deleteMatch
@hostclub varchar(20),
@guestclub varchar(20)
AS
DECLARE @hostclubid int
SELECT @hostclubid = club_ID
FROM Club
WHERE @hostclub = name
DECLARE @guestclubid int
SELECT @guestclubid = club_ID
FROM Club
WHERE @guestclub = name
DELETE FROM Match
WHERE Host_Club_ID = @hostclubid AND Guest_Club_ID = @guestclubid
GO
--v
CREATE PROC deleteMatchesOnStadium
@stadium VARCHAR(20)
AS
DELEtE FROM Match
WHERE Stadium_ID = (SELECT ID FROM Stadium WHERE @stadium = name) AND GETDATE() < Start_Time;
GO
--vi
CREATE PROC addClub
@club VARCHAR(20),
@clublocation VARCHAR(20)
AS
INSERT INTO Club (Name,Location)
Values(@club,@clublocation)
Go
--vii
CREATE PROC addTicket
@hostclub varchar(20),
@guestclub varchar(20),
@starttime datetime
AS
DECLARE @hostclubid int
SELECT @hostclubid = club_ID
FROM Club
WHERE @hostclub = name
DECLARE @guestclubid int
SELECT @guestclubid = club_ID
FROM Club
WHERE @guestclub = name
DECLARE @matchid int
SELECT @matchid = match_ID
FROM Match
WHERE Host_Club_ID = @hostclubid AND Guest_Club_ID = @guestclubid AND Start_Time = @starttime
INSERT INTO Ticket(Match_ID ,Status )
VALUES(@matchid , 1)
GO
--viii
CREATE PROC deleteClub
@club VARCHAR(20)
AS
DELETE FROM clubsWithNoMatches
WHERE name = @club
GO
--ix
CREATE PROC addStadium
@stadium VARCHAR(20),
@location VARCHAR(20),
@capacity int
AS
INSERT INTO Stadium(Capacity,Name,Location, Status)
VALUES(@capacity,@stadium,@location , '1')
GO
--x
CREATE PROC deleteStadium -- if statues = 1 ???
@stadium VARCHAR(20)
AS
--DECLARE @stadiumID INT
--SELECT @stadiumID = ID
--FROM Stadium
--WHERE NAME = @stadium
DELETE FROM Stadium
WHERE name = @stadium
--UPDATE MATCH
--SET Stadium_ID = NULL
--WHERE @staddiumID = Stadium_ID
--UPDATE StadiumManager
--SET Stadium_ID = NULL
--WHERE @staddiumID = Stadium_ID
GO
--lujina
CREATE PROC blockFan
@NationalID Varchar(20)
AS
Update Fan
set Status = 0 -- 0 Blocked
Where National_ID=@NationalID;
GO
CREATE PROC unblockFan
@NationalID Varchar(20)
AS
Update Fan
set Status = 1 -- 1 Unblocked
Where National_ID=@NationalID;
GO
CREATE PROC addRepresentative
@Name Varchar(20),
@ClubName Varchar(20),
@username Varchar(20),
@password Varchar(20)
AS
DECLARE @temp Varchar(20)
Select @temp=Club.club_ID
FROM Club
Where Name=@ClubName
INSERT INTO SystemUser VALUES (@username,@password);
INSERT INTO ClubRepresentative (Name,username,Club_ID) VALUES (@Name , @username , @temp);
GO
CREATE FUNCTION [viewAvailableStadiumsOn](@date datetime)
Returns Table
AS
RETURN
Select Stadium.Name , Stadium.Capacity , Stadium.Location
From Stadium
INNER JOIN Match
ON Stadium.ID = Match.Stadium_ID
Where Stadium.status=1 AND Match.Start_Time<>@date ;
GO
CREATE PROC addHostRequest
@ClubName Varchar(20),
@StadiumName Varchar(20),
@StartTime Datetime
AS
Declare @CR int
Declare @SM int
Declare @MatchID int
Select @CR = ClubRepresentative.ID
From ClubRepresentative inner join Club on club.club_ID = ClubRepresentative.Club_ID
Where Club.name = @ClubName;
Select @MatchID = Match.match_ID
From match
INNER JOIN Club ON match.Host_Club_ID = club.club_ID
Where Match.Start_Time = @StartTime AND club.Name = @ClubName ;
Select @SM = StadiumManager.ID
From StadiumManager inner join Stadium on Stadium.ID = StadiumManager.Stadium_ID
Where Stadium.Name = @StadiumName;
Insert Into HostRequest (Match_ID , Status , Manager_ID , representative_ID ) Values (@MatchID , 'unhandled',@SM , @CR)
GO
CREATE FUNCTION [allUnassignedMatches] (@HostClub Varchar(20))
Returns Table
AS
Return
Select guestClub.Name , Match.Start_Time
From Match
INNER JOIN Club hostClub ON hostClub.club_ID = Match.Host_Club_ID inner join Club guestClub ON guestClub.club_ID = Match.Guest_Club_ID
Where Match.Stadium_ID is null and hostClub.Name = @HostClub ;
GO
CREATE PROC addStadiumManager
@Name Varchar(20),
@StadiumName Varchar(20),
@username Varchar(20),
@password Varchar(20)
AS
DECLARE @temp Varchar(20)
Select @temp=ID
FROM Stadium
Where Name=@StadiumName
INSERT INTO SystemUser VALUES (@username,@password);
INSERT INTO StadiumManager(Name,username,Stadium_ID ) VALUES (@Name , @username , @temp);
GO
CREATE FUNCTION [allPendingRequests] (@SM Varchar(20))
Returns Table
AS
Return
Select ClubRepresentative.Name AS ClubRepresentativeName , Guest.Name AS GuestClubName , Match.Start_Time
From Stadium
Inner Join StadiumManager ON Stadium.ID = StadiumManager.Stadium_ID
Inner Join HostRequest ON StadiumManager.ID = HostRequest.Manager_ID
Inner Join Match ON Match.match_ID = HostRequest.Match_ID
Inner Join Club Host ON Host.club_ID=Match.Host_Club_ID
Inner Join Club Guest ON Guest.club_ID=Match.Guest_Club_ID
Inner Join ClubRepresentative ON HostRequest.representative_ID=ClubRepresentative.ID
Where StadiumManager.username = @SM AND HostRequest.Status = 'Unhandled';
GO
CREATE PROC acceptRequest
@StadiumManagerUserName Varchar(20),
@HostName Varchar(20),
@GuestName Varchar(20),
@time datetime
AS
Declare @temp int
Declare @Host int
Declare @Guest int
Declare @ID int
declare @cap int
declare @matchId int
Select @Host = club_ID
From Club
Where @HostName=Name
Select @Guest = club_ID
From Club
Where @GuestName=Name
Select @temp = HostRequest.ID , @ID=StadiumManager.Stadium_ID
From HostRequest
Inner Join StadiumManager ON StadiumManager.ID = HostRequest.Manager_ID
Right Outer Join Match ON Match.match_ID = HostRequest.Match_ID
Where Match.Guest_Club_ID = @Guest AND Match.Host_Club_ID = @Host AND Match.Start_Time=@time AND StadiumManager.username=@StadiumManagerUserName
select @cap = Capacity
from Stadium
where Stadium.ID = @ID
select @matchId = match_ID
from match
where Host_Club_ID= @Host and Guest_Club_ID= @Guest and Start_Time = @time
DECLARE @i INT = 0;
WHILE @i < @cap
BEGIN
Exec addTicket @HostName, @GuestName, @time
SET @i = @i + 1;
END;
Update HostRequest
Set Status = 'accepted'
Where ID = @temp
Update Match
Set Match.Stadium_ID=@ID
Where Match.Guest_Club_ID=@Guest AND Match.Host_Club_ID=@Host AND Match.Start_Time=@time
GO
CREATE PROC rejectRequest
@StadiumManagerName Varchar(20),
@HostName Varchar(20),
@GuestName Varchar(20),
@time datetime
AS
Declare @temp int
Declare @Host int
Declare @Guest int
Select @Host = club_ID
From Club
Where @HostName=Name
Select @Guest = club_ID
From Club
Where @GuestName=Name
Select @temp = HostRequest.ID
From HostRequest
Inner Join StadiumManager ON StadiumManager.ID = HostRequest.Manager_ID
Inner Join Match ON Match.Guest_Club_ID = @Guest AND Match.Host_Club_ID = @Host AND Match.Start_Time=@time -- Match.Stadium_ID = StadiumManager.Stadium_ID
Where StadiumManager.username=@StadiumManagerName
Update HostRequest
Set Status = 'rejected'
Where ID = @temp
GO
CREATE PROC addFan
@Name Varchar(20),
@Username Varchar(20),
@password Varchar(20),
@NationalID Varchar(20),
@Address Varchar(20),
@Phone Varchar(20),
@BirthDate datetime
AS
INSERT INTO SystemUser VALUES (@Username, @password);
INSERT INTO Fan (Name, National_ID , Address , Phone_No , Birth_Date ,Status , username) VALUES (@Name , @NationalID , @Address , @Phone , @BirthDate ,'1' , @Username);
GO
-- Hussein
--xxii
CREATE FUNCTION [upcomingMatchesOfClub]
(@C VARCHAR(20))
RETURNS TABLE
AS
RETURN
SELECT C1.Name AS given_club , C2.Name AS competing_club , M.Start_Time , S.Name AS staduim
FROM Club C1 INNER JOIN Match M ON (C1.club_ID = M.Guest_Club_ID OR C1.club_ID = M.Host_Club_ID)
INNER JOIN Club C2 ON C2.club_ID <>C1.club_ID AND (C2.club_ID = M.Host_Club_ID OR C2.club_ID = M.Guest_Club_ID) , Stadium S
WHERE C1.Name = @C AND CURRENT_TIMESTAMP < M.Start_Time AND S.ID = M.match_ID
GO
--xxiii
CREATE FUNCTION [availableMatchesToAttend]
(@D datetime)
RETURNS TABLE
AS
RETURN
SELECT distinct C1.Name AS HostClubName , C2.Name AS GuestClubName , M.Start_Time , Stadium.Name
FROM Match M
INNER JOIN Club C1 ON M.Host_Club_ID=C1.club_ID
INNER JOIN Club C2 ON M.Guest_Club_ID=C2.club_ID
INNER JOIN Stadium ON M.Stadium_ID=Stadium.ID ,Ticket T
WHERE M.Start_Time > @D AND T.Match_ID = M.match_ID and T.Status = 1
GO
--proc to find match id by host , guest , and date USED IN purchaseTicket
--CREATE PROC findMatch
--@hClubName VARCHAR(20),
--@guestClubName VARCHAR(20),
--@date datetime,
--@M int OUTPUT
--AS
--SELECT @M =M.match_ID
--FROM Match M INNER JOIN Club C1 ON M.Host_Club_ID =C1.club_ID INNER JOIN Club C2 ON M.Guest_Club_ID = C2.club_ID
--WHERE C1.Name = @hClubName AND C2.Name = @guestClubName AND M.Start_Time = @date
GO
--xxiv
CREATE PROC purchaseTicket
@n_id Varchar(20),
@hClubName VARCHAR(20),
@guestClubName VARCHAR(20),
@date datetime
AS
DECLARE @m_id int
DECLARE @Ticket int
Select TOP 1 @Ticket= Ticket.ID ,@m_id= Match.match_ID
From Ticket
INNER JOIN Match ON Match.match_ID=Ticket.Match_ID
INNER JOIN Club C1 ON MAtch.Host_Club_ID = C1.club_ID
INNER JOIN Club C2 ON MAtch.Guest_Club_ID = C2.club_ID
Where C1.Name=@hClubName AND C2.Name=@guestClubName AND Match.Start_Time=@date AND Ticket.Status=1
if (@Ticket is not null)
begin
INSERT INTO TicketBuyingTransactions (fan_national_ID , ticket_ID ) VALUES (@n_id , @Ticket )
end
UPDATE Ticket
SET Status = 0
WHERE Ticket.ID=@Ticket
GO
--proc to find club id by club name USED IN purchaseTicket
--CREATE PROC findClub
--@clubName VARCHAR(20),
--@cid int OUTPUT
--AS
--SELECT @cid = C.club_ID
--FROM Club C
--WHERE C.Name = @clubName
--xxv
CREATE PROC updateMatchHost
@hClubName VARCHAR(20),
@guestClubName VARCHAR(20),
@date datetime
AS
DECLARE @m_id int
SELECT @m_id =M.match_ID
FROM Match M INNER JOIN Club C1 ON M.Host_Club_ID =C1.club_ID INNER JOIN Club C2 ON M.Guest_Club_ID = C2.club_ID
WHERE C1.Name = @hClubName AND C2.Name = @guestClubName AND M.Start_Time = @date
DECLARE @ch_id int
SELECT @ch_id = C.club_ID
FROM Club C
WHERE C.Name =@hClubName
DECLARE @cg_id int
SELECT @cg_id = C.club_ID
FROM Club C
WHERE C.Name = @guestClubName
UPDATE Match
SET Host_Club_ID = @cg_id
WHERE match_ID= @m_id
UPDATE Match
SET Guest_Club_ID = @ch_id
WHERE match_ID= @m_id
GO
--xxvi
CREATE VIEW matchesPerTeam AS
SELECT C.Name , COUNT(M.match_ID) AS Match_NO
FROM Club C INNER JOIN Match M ON (C.club_ID = M.Host_Club_ID OR C.club_ID = M.Guest_Club_ID)
WHERE CURRENT_TIMESTAMP > M.Start_Time
GROUP BY C.club_ID , C.Name
GO
--xxviii
CREATE VIEW clubsNeverMatched AS
select C1.Name AS CLUB1 , C2.Name AS CLUB2
from club c1 INNER JOIN club c2 ON c1.club_ID > c2.club_ID
EXCEPT(SELECT c3.name, c4.name
FROm Match INNER JOIN CLUB c3 ON Host_Club_ID = c3.club_ID INNER JOIN Club c4 ON Guest_Club_ID = c4.club_ID
)
EXCEPT (SELECT c5.name, c6.name
FROm Match INNER JOIN CLUB c5 ON Guest_Club_ID = c5.club_ID INNER JOIN Club c6 ON Host_Club_ID = c6.club_ID
)
--Not Exists (select C3.Name AS CLUB1 , C4.Name AS CLUB2
--From Match
--Inner Join Club C3 On C3.club_ID= Match.Host_Club_ID
--Inner Join Club C4 ON C4.club_ID= Match.Guest_Club_ID
--Where (C3.club_ID=Match.Guest_Club_ID AND C4.club_ID=Match.Host_Club_ID) OR (C4.club_ID=Match.Guest_Club_ID AND C3.club_ID=Match.Host_Club_ID) )
GO
--xxix
CREATE FUNCTION [clubsNeverPlayed]
(@clubName VARCHAR(20))
RETURNS TABLE
AS
RETURN
select C1.Name AS CLUB1 , C2.Name AS CLUB2
from club c1 INNER JOIN club c2 ON c1.club_ID <> c2.club_ID
WHERE c1.name = @clubName
EXCEPT(SELECT c3.name, c4.name
FROm Match INNER JOIN CLUB c3 ON Host_Club_ID = c3.club_ID INNER JOIN Club c4 ON Guest_Club_ID = c4.club_ID
)
EXCEPT (SELECT c5.name, c6.name
FROm Match INNER JOIN CLUB c5 ON Guest_Club_ID = c5.club_ID INNER JOIN Club c6 ON Host_Club_ID = c6.club_ID
)
GO
--xxx
CREATE FUNCTION [matchWithHighestAttendance]()
RETURNS TABLE
AS
RETURN
SELECT TOP 1 C1.Name AS HostClubName, C2.Name AS GuestClubName
FROM Match
INNER JOIN Ticket ON Ticket.Match_ID = Match.Match_ID
INNER JOIN Club C1 ON C1.club_ID = Match.Host_Club_ID
INNER JOIN Club C2 ON C2.club_ID = Match.Guest_Club_ID
WHERE Ticket.Status=0
GROUP BY C1.Name , C2.Name, match.Match_ID
ORDER BY COUNT (Ticket.ID) DESC
GO
--xxxi
CREATE FUNCTION [matchesRankedByAttendance]()
RETURNS TABLE
AS
RETURN
SELECT TOP 100 C1.Name AS HostClubName, C2.Name AS GuestClubName
FROM Match
INNER JOIN Ticket ON Ticket.Match_ID = Match.Match_ID
INNER JOIN Club C1 ON C1.club_ID = Match.Host_Club_ID
INNER JOIN Club C2 ON C2.club_ID = Match.Guest_Club_ID
WHERE Ticket.Status=0
GROUP BY C1.Name , C2.Name, match.Match_ID
ORDER BY COUNT (Ticket.ID) DESC
GO
--proc to find Staduim id by Staduim name and Staduim id USED IN purchaseTicket
--CREATE PROC findStaduim
--@staduimName VARCHAR(20),
--@sid int OUTPUT
--AS
--SELECT @sid = S.ID
--FROM Stadium S
--WHERE S.Name = @staduimName
--xxvi
--CREATE PROC deleteMatchesOnStadium
--@staduimName VARCHAR(20)
--AS
--DECLARE @s_id int
--EXEC findStaduim @staduimName ,@s_id OUTPUT
--DELETE FROM Match WHERE Stadium_ID = @s_id AND CURRENT_TIMESTAMP < Match.StartTime
GO
--xxxii
CREATE FUNCTION [requestsFromClub]
(@staduimName VARCHAR(20),@clubName VARCHAR(20))
RETURNS TABLE
AS
RETURN
SELECT C1.Name AS HostClub , C2.Name AS GuestClub
FROM Stadium S INNER JOIN StadiumManager SM ON S.ID = SM.Stadium_ID
INNER JOIN HostRequest R ON SM.ID = R.Manager_ID
INNER JOIN ClubRepresentative CR ON R.representative_ID = CR.ID
INNER JOIN Match M ON M.match_ID = R.Match_ID
INNER JOIN Club C ON C.club_ID =CR.Club_ID
, Club C1 , Club C2
WHERE M.Host_Club_ID = C1.club_ID AND M.Guest_Club_ID = C2.club_ID AND S.Name = @staduimName AND C.Name = @clubName
GO