使用多个MySQL列值填充一维数组

时间:2013-03-23 18:02:21

标签: php mysql arrays

我是PHP和MySQL的新手,但有VBA和C ++的经验。简而言之,我试图计算一个值(文本字符串)的出现次数,它可以出现在我的表中的11列中。

我想我需要从这个表填充一维数组,但该表有14列(名为'player1'到'player14')。我想让每个'玩家'进入一维数组(如果不是NULL),然后再进入下一行。

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

对于背景,我正在构建一个足球结果数据库,其中player1到player14是起始11(和3个潜艇),我的PHP代码将计算玩家出场的次数。

感谢您的帮助!

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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个玩家,这些玩家指向同一个团队,并通过加入两个表格,提取与您的搜索匹配的玩家。

答案 2 :(得分:0)

首先,您使用的数据库架构非常糟糕,您只是找到了原因。

话虽如此,我认为没有别的办法可以通过明确地将球员的名字选为阵列来获得所有球员的名单。在每次插入之前,您必须检查名称是否已经在数组中(如果它已经存在,请不要再次添加)。

然后,当你有名字列表时,你必须为每个玩家运行一个SQL语句,累计出现次数,如下所示:

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

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