雖然這個問題應該被視爲過於寬泛,是一個這很適合(請在問之前嘗試一些東西!),這足以讓我回答它。
我不會在PHP中這樣做,而是在純SQL中。
假設像這樣的結構:
CREATE TABLE game (
game_id INT PRIMARY KEY,
name VARCHAR(50)
);
CREATE TABLE tag (
tag_id INT PRIMARY KEY,
label VARCHAR (50)
);
CREATE TABLE gametag (
game_id INT,
tag_id INT,
rank INT, -- ranks from 1 to 5, rank "1" will weightmeans "5 points"
PRIMARY KEY (game_id, tag_id),
UNIQUE (game_id, tag_id, rank),
CONSTRAINT gid_fk FOREIGN KEY gid_fk_idx (game_id) REFERENCES game (game_id),
CONSTRAINT tid_fk FOREIGN KEY tid_fk_idx (tag_id) REFERENCES tag (tag_id)
);
的 「匹配得分」 兩場之間將與這樣的查詢來獲得:
SELECT
game1.name AS game_1,
game2.name AS game_2,
SUM(match_score) AS score
FROM (
SELECT
game1.game_id AS game1_id,
game2.game_id AS game2_id,
(6 - gametag1.rank) * (6 - gametag2.rank) AS match_score -- modify the magic "6" if you allow more or less than 5 tags
FROM game AS game1
JOIN gametag AS gametag1 USING (game_id)
JOIN tag AS tag1 USING (tag_id)
JOIN tag AS tag2 USING (tag_id)
JOIN gametag AS gametag2 USING (tag_id)
JOIN game AS game2 ON game2.game_id = gametag2.game_id
WHERE game1.game_id = 1 AND game2.game_id = 2
) AS scores
JOIN game AS game1 ON game1.game_id = game1_id
JOIN game AS game2 ON game2.game_id = game2_id
GROUP BY game1_id, game2_id;
有趣!這是一個非常酷的主意! +1 – pattyd
這個問題目前有點寬泛 - 這是一個有趣的問題,但它可能不適合這裏。你當然可以用PHP來做到這一點,但如果你放棄它,那麼可能會更好,然後在遇到困難時詢問具體的問題。 – halfer
你的問題是什麼?請描述你有問題的部分。 –