是否可以从MySQL中添加更多文本到文本?

时间:2014-05-18 22:11:33

标签: php mysql

好的,所以我想为团队制作这个表格。类似的东西:

Football Club Name | W-W-L-D-W(W =胜利,D =平局,L =失败)

我认为我会这样做的方法是添加文字。例如,FC Apple - FC Banana就有这场比赛。香蕉队以0-1获胜。在团队表的团队排中,"表格"列被修改,添加" -W"。香蕉与香槟的另一场比赛,他们输了。再次添加" -L"到专栏。所以现在这个专栏是" -W-L"。这可能吗?

我考虑过制作5个colums,lastmatch,lastmatch2,... lastmatch5。当一个团队获胜时,lastmatch5为W.如果lastmatch4为null并且团队失败,则lastmatch4将为L.如果所有lastmatch列都已填充,则make lastmatch1 = lastmatch2,2 = 3,3 = 4,4 = 5,5 = null,由结果填充。

但这非常复杂......那就是为什么我想到了第一种方法。 还有其他方法吗?你觉得怎么样?

1 个答案:

答案 0 :(得分:5)

首先,要回答您的问题,您可以从列中获取当前内容,例如W-W-L-D,添加最近的结果,例如-W,然后使用新字符串更新列 - W-W-L-D-W。但我并不建议这样做。将单个记录存储在长字符串中可能不是最好的主意。而是创建单独的关系表。这只是我的头脑,但我会考虑做更像这样的事情:

Table: Football_club
+========================+
|  Id     |     Name     |
|---------|--------------|
|  1      |    Apple     |
|  2      |    Banana    |
|  3      |    Kiwi      |
+========================+
//This table stores each Football club's basic info


Table: Matches
+================================================+
| Id    |   Date    |   Team1_id  |   Team2_id   |   
|-------|-----------|-------------|--------------|
|  1    |2014-05-14 |     1       |     2        |
|  2    |2014-05-15 |     1       |     3        |
|  3    |2014-05-16 |     2       |     3        |
+================================================+
//This table stores basic info about each match.


Table: Match_outcomes
+==================================+
| Id    |  Match_id    | Winner_id |   
|-------|--------------|-----------|
|  1    |     1        |     2     |
|  2    |     2        |    NULL   |
|  3    |     3        |     3     |
+==================================+
//This table stores match outcomes. 
//A winner ID of NULL would mean it was a draw (you could also use 0 or -1 or some other value that is not a team id)

通过这种方式,您可以随时获得任何团队的获胜,失败和平局数量,或者非常轻松地添加匹配和匹配结果。

例如,要获得团队$id的获胜次数:

(我还没有对此进行测试,但我认为它会起作用)

SELECT 
    COUNT(mo.id) AS wins
FROM match_outcomes mo
JOIN matches m ON m.id = mo.match_id
    AND (m.team_id1 = $id OR m.team_id2 = $id)
WHERE mo.winner_id = $id
GROUP BY mo.winner_id

更新 - 一直在搞乱这个...这里有一个示例查询,可以使用上面的数据库获得每个团队的所有胜利,亏损和平局:

SELECT 
    fc.name,
    SUM(IF(mo.winner_id=fc.id, 1, 0)) AS wins,
    SUM(IF(mo.winner_id!=fc.id, 1, 0)) AS losses,
    SUM(IF(ISNULL(mo.winner_id), 1, 0)) AS draws
FROM match_outcomes mo
JOIN matches m ON m.id = mo.match_id
JOIN football_clubs fc ON fc.id = m.team1_id
    OR fc.id = m.team2_id
GROUP BY fc.name

See this SQL Fiddle

这只是一个粗略的想法 - 希望它有用!