1

我对 PHP 和 MySQL 很陌生,但有 VBA 和 C++ 的经验。简而言之,我正在尝试计算一个值(文本字符串)的出现次数,该值可以出现在我表的 11 列中。

我想我需要从这个表中填充一个一维数组,但是该表有 14 列(命名为“player1”到“player14”)。我希望将这些“玩家”中的每一个都输入一维数组(如果不是 NULL),然后再进行下一行。

我知道 MySQL 中有 SELECT DISTINCT 语句,但我可以使用它来计算 14 列中不同的出现次数吗?

作为背景,我正在构建一个足球结果数据库,其中 player1 到 player14 是首发 11 人(和 3 个替补),我的 PHP 代码将计算一名球员出场的次数。

感谢你的帮助!

马特。

4

3 回答 3

1

重新考虑您的数据库架构。试试这个:

表玩家:
player_id
名称

桌面游戏:
game_id

表外观:
appearance_id
player_id
game_id

这减少了重复数据的数量。阅读规范化。它允许你做一个简单的select count(*) from appearances inner join players on player_id where name='Joe Schmoe'

于 2013-03-23T18:10:13.097 回答
0

这听起来像是fetch_assochttp://php.net/manual/de/mysqli-result.fetch-assoc.php)的工作。

如果你使用 mysqli,你会得到每一行作为一个关联数组。

另一方面,如前所述,桌子设计似乎有点缺陷。如果你在桌子上team有球队名称,什么没有,还有一张桌子player上有球员名字。

TEAM
| id | name | founded | foo |

PLAYER
| id | team_id | name | bar |

使用这种结构,您可以添加 14 名球员,这些球员指向同一支球队,并通过连接两个表格,提取与您的搜索匹配的球员。

于 2013-03-23T18:06:05.140 回答
0

首先,您使用的数据库模式很糟糕,而您刚刚找到了原因。

话虽如此,我认为没有其他方法可以首先通过明确地将玩家的姓名选择到数组中来获取所有玩家的列表。在每次插入之前,您必须检查名称是否已经在数组中(如果已经在,不要再添加它)。

然后,当您拥有名称列表时,您必须为每个玩家运行一条 SQL 语句,将出现次数相加,如下所示:

SELECT COUNT(*)
FROM <Table>
WHERE player1=? OR player2=? OR player3=? OR ... OR player14 = ?

这一切都非常复杂,正如我所说,你应该真正改变你的数据库模式。

于 2013-03-23T18:09:48.087 回答