我一直在做一些研究,並看看這種數學算法的多邊形算法,以幫助爲五個側面聯盟創建裝置。我希望通過一套基礎技術來實現這一點。我收購只是現在是五邊聯賽下列要求要創建的賽程表:使用數學方法創建夾具列表
- 有3輪聯賽,每個聯賽
- 每個小組5支球隊中起着對方主場和客場自己的聯賽中
- 每一組的比賽中(在URL中顯示的示例輪和比賽的)圓/周
我已經設置所有的球隊和聯賽中出場,只是需要幫助夾具和之前我使用過UNION和'Team'表和'CROSS JOIN' '團隊'表(以確定主隊和客隊),但現在我想從頭開始使用這種算法。我不想使用嵌套循環,我認爲它可以通過集合基礎完成,但只需要更多的開發人員來看看他們將如何做,我相信這個算法可以提供幫助。
這裏是算法的鏈接:http://www.mathscareers.org.uk/article/football-fixtures-whats-score/的聯賽,球隊和夾具表
禰架構如下:
聯賽:
[LeagueID] TINYINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[LeagueName] VARCHAR(30) UNIQUE
團隊:
[TeamID] TINYINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[TeamAbbreviation] CHAR(3) UNIQUE,
[TeamName] VARCHAR(50) UNIQUE,
[LeagueID] TINYINT CONSTRAINT FK_Team_League FOREIGN KEY REFERENCES League(LeagueID)
燈具:
[FixtureID] INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
[WeekNumber] INT NOT NULL,
[FixtureDate] DATE NULL,
[HomeTeamID] TINYINT NULL,
[AwayTeamID] TINYINT NULL,
[LeagueID] TINYINT CONSTRAINT FK_Fixture_League FOREIGN KEY REFERENCES League(LeagueID)
希望有幫助,下面是我使用過的一段代碼/邏輯,如果你想參考(失敗,這是因爲它爲所有團隊的主場比賽做了1-11周的比賽,這意味着球隊的逆向裝置時他們的離開從來都不是正確的,因爲他們將在同一周內與他們的主場比賽進行比賽)。這就是爲什麼我想更改邏輯以遵循多邊形算法,但不知道如何將其應用於代碼。
CREATE PROCEDURE [dbo].[Fixture_Insert]
@StartFixtureWeek DATE
AS
SET NOCOUNT ON
BEGIN
INSERT INTO dbo.Fixture (WeekNumber, HomeTeamID, AwayTeamID, FixtureDate, LeagueID)
SELECT
ROW_NUMBER() OVER (PARTITION BY h.teamID ORDER BY h.TeamID, a.TeamID, h.LeagueID) AS WeekNumber,
h.TeamID,
a.TeamID,
DATEADD(day,(ROW_NUMBER() OVER (ORDER BY h.LeagueID)-1)*7,@StartFixtureWeek) AS FixtureWeek,
h.LeagueID
FROM dbo.Team h
CROSS JOIN dbo.Team a
WHERE h.TeamID <> a.TeamID
AND h.LeagueID = a.LeagueID
END
謝謝cimbali,這在邏輯上合理。我將要面對的問題是編碼,所以我想知道如果你不介意我們可以一點一點地通過它(也許使用聊天),所以我可以看到並理解該怎麼做? –
已標記的答案,但沒有編碼它,如所述,如果你不介意與我通過如何編碼它,請給我評論。我會非常活躍,所以我知道發生了什麼 –
@carlBrooks對不起,我現在沒有太多時間了(加上聊天中找不到你)。試着從編寫一個返回(或插入)燈具的過程開始,只需一輪,給定一個整數。你有所有的公式來做到這一點。 – Cimbali