2013-03-23 80 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