用多个MySQL列值填充一维数组 我对PHP和MySQL比较陌生,但有VBA和C++的经验。简而言之,我试图统计一个值(文本字符串)的出现次数,该值可以出现在我的表中的11列中
我想我需要从这个表中填充一个一维数组,但是这个表有14列(名为“player1”到“player14”)。我希望在进入下一行之前,将这些“玩家”中的每一个输入到一维数组中(如果不是NULL) 我知道MySQL中有SELECT DISTINCT语句,但是我可以用它来计算14列中的不同事件吗 作为背景,我正在构建一个足球成绩数据库,其中player1到player14是起始11(和3个替补),我的PHP代码将计算一名球员出场的次数 谢谢你的帮助用多个MySQL列值填充一维数组 我对PHP和MySQL比较陌生,但有VBA和C++的经验。简而言之,我试图统计一个值(文本字符串)的出现次数,该值可以出现在我的表中的11列中,php,mysql,arrays,Php,Mysql,Arrays,我想我需要从这个表中填充一个一维数组,但是这个表有14列(名为“player1”到“player14”)。我希望在进入下一行之前,将这些“玩家”中的每一个输入到一维数组中(如果不是NULL) 我知道MySQL中有SELECT DISTINCT语句,但是我可以用它来计算14列中的不同事件吗 作为背景,我正在构建一个足球成绩数据库,其中player1到player14是起始11(和3个替补),我的PHP代码将计算一名球员出场的次数 谢谢你的帮助 马特。这听起来像是fetch_assoc()的工作 如
马特。这听起来像是
fetch_assoc
()的工作
如果您使用mysqli,您将得到每一行作为关联数组
另一方面,桌子的设计似乎有点缺陷,正如前面所说的。
如果您有一张表team
和一张表player
和一张表和一名球员
TEAM
| id | name | founded | foo |
PLAYER
| id | team_id | name | bar |
通过这种结构,您可以添加14名玩家,他们指向同一个团队,并通过连接两个表,提取与您的搜索匹配的玩家。这听起来像是fetch_assoc
()的工作
如果您使用mysqli,您将得到每一行作为关联数组
另一方面,桌子的设计似乎有点缺陷,正如前面所说的。
如果您有一张表team
和一张表player
和一张表和一名球员
TEAM
| id | name | founded | foo |
PLAYER
| id | team_id | name | bar |
使用这种结构,您可以添加14名玩家,他们指向同一个团队,通过连接两个表,提取与您的搜索匹配的玩家。首先,您使用的数据库模式非常糟糕,您刚刚找到了原因
也就是说,我认为没有其他方法可以首先通过在数组中清晰地选择玩家的名字来获得所有玩家的列表。在每次插入之前,您必须检查名称是否已经在数组中(如果已经在数组中,请不要再次添加)
然后,当您拥有名称列表时,必须为每个播放器运行SQL语句,将出现的次数相加,如下所示:
SELECT COUNT(*)
FROM <Table>
WHERE player1=? OR player2=? OR player3=? OR ... OR player14 = ?
选择计数(*)
从…起
其中player1=?或者player2=?或者player3=?或或者player14=?
这非常复杂,正如我所说,您应该真正更改数据库模式。首先,您使用的数据库模式非常糟糕,您刚刚找到了原因
也就是说,我认为没有其他方法可以首先通过在数组中清晰地选择玩家的名字来获得所有玩家的列表。在每次插入之前,您必须检查名称是否已经在数组中(如果已经在数组中,请不要再次添加)
然后,当您拥有名称列表时,必须为每个播放器运行SQL语句,将出现的次数相加,如下所示:
SELECT COUNT(*)
FROM <Table>
WHERE player1=? OR player2=? OR player3=? OR ... OR player14 = ?
选择计数(*)
从…起
其中player1=?或者player2=?或者player3=?或或者player14=?
这非常复杂,正如我所说的,您应该真正更改您的数据库模式。重新考虑您的数据库模式。试试这个:
桌上球员:
玩家id
名字
桌上游戏:
游戏id
表外观:
外观\u id
玩家id
游戏id
这减少了重复数据的数量。仔细阅读规范化。它允许您在player_id上的name='Joe Schmoe'
重新考虑数据库模式时,从中执行一个简单的选择count(*)。试试这个:
桌上球员:
玩家id
名字
桌上游戏:
游戏id
表外观:
外观\u id
玩家id
游戏id
这减少了重复数据的数量。仔细阅读规范化。它允许您从player_id上的name='Joe Schmoe'
可以按照您的要求执行操作,但您可能需要重新设计您的表,player1…14听起来不太正确。可以按照您的要求执行操作,但您可能需要重新设计表,player1…14听起来不太对劲。谢谢Joe,它最初是一个Excel VBA项目-因此我现在有了名为“比赛”、“球员”、“球队”(包含对其他对手的记录,P、W、D、L等)-“比赛”表是主要驱动力,包含每场比赛的一行(由赫尔城进行)-,列包括得分者(1-11)和球员(1-14)-因此,每当添加新的“比赛”时,我都需要这样做(用外观和得分总数更新“球员”表)。谢谢你的指点,我会看看是否可以重新设计模式。非常感谢!感谢Joe,它最初是一个Excel VBA项目——因此我现在有了标题为“比赛”、“球员”、“球队”(包含对其他对手的记录,P、W、D、L等等)的表格——“比赛”表格是主要驱动因素,“比赛”表格包含每场比赛的一行(赫尔城)以及包括记分员(1-11)和球员(1-14)的列-因此,每当添加新的“比赛”时,我都需要这样做(用外观和得分总数更新“球员”表)。谢谢你的指点,我会看看是否可以重新设计模式。非常感谢!感谢Geier,非常感谢这些评论-我知道这会导致糟糕的模式,随后会导致混乱的查询和PHP代码-我会看看是否可以改进。感谢Geier,非常感谢这些评论-我知道这会导致糟糕的模式,随后会导致混乱的查询和PHP代码-我会看看是否可以改进。是的,我想我明白你的意思-我想我需要另一张表格来参考每个球员的比赛(见我在qu上对乔的回答)