2013-03-23 78 views
1

我对PHP和MySQL相当陌生,但拥有VBA和C++的经验。总之,我正在计算一个值(文本字符串)的出现次数,它可以出现在我的表格的11列中。填充具有多个MySQL列值的一维数组

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

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

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

感谢您的帮助!

Matt。

+0

这是可以做到你所要求的,但你可能要重新设计你的表,PLAYER1 ...... 14不健全的权利。 – Vatev 2013-03-23 18:06:20

回答

1

反思您的数据库模式。试试这个:

表的球员:
player_id

表游戏:
game_id

表露面:
appearance_id
player_id
game_id

这减少量的复制品te数据。阅读正常化。它可以让你做一个简单的select count(*) from appearances inner join players on player_id where name='Joe Schmoe'

+0

感谢乔,它开始作为一个Excel VBA项目 - 所以我现在已经表名为“较量”,“玩家”,“团队”(含与其他对手球队,P,W,d,L等记录) - 'Matches'表是主要的驱动因素,每场比赛(赫尔城队)都有一排 - 列队包括得分手(1-11)和球员(1-14) - 因此我需要这样做(更新'球员的外观和进球总数) - 每当添加一个新的“比赛”时。感谢指针,我会看看我是否可以重新设计架构。非常感谢! – 2013-03-23 18:59:06

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名球员,这在同一支球队,并通过连接两个表点,提取符合搜索条件的球员。

+0

是的,我想我明白你的意思 - 我想我需要另一个表引用每个球员有比赛(见我的乔在上述问题的回应,对于背景) - 也许一列“goals_scored”,以及..(因为它可以不止一个,但对赫尔城非常​​罕见);-) – 2013-03-23 19:12:19

0

首先,您使用的数据库模式非常糟糕,您只是找到了原因。这就是说,我没有看到任何其他方式,首先通过明确地选择阵列中玩家的名字来获得所有玩家的列表。在每次插入之前,您必须检查名称是否已经在数组中(如果它已经在,不要再添加它)。

然后,当你有名字的名单,你就必须运行每个球员的SQL语句,加起来OCCURENCES的数量,就像这样:

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

这是所有相当复杂,正如我所说,你应该真的改变你的数据库模式。

+0

感谢盖尔,真的很感谢那些评论 - 我知道它使一个贫穷的架构,并随后凌乱查询和PHP代码 - 我会看看我能不能改善它。 – 2013-03-23 19:00:51