1

私はPHPとMySQLにまったく慣れていませんが、VBAとC++の経験があります。つまり、テーブルの11列に表示される可能性のある値(テキスト文字列)の出現回数をカウントしようとしています。

このテーブルから1次元配列を設定する必要があると思いますが、テーブルには14列(「player1」から「player14」という名前)があります。次の行に進む前に、これらの「プレーヤー」のそれぞれを1次元配列(NULLでない場合)に入力する必要があります。

MySQLにSELECTDISTINCTステートメントがあることは知っていますが、これを使用して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

まず第一に、あなたが使用しているデータベーススキーマはひどいです、そしてあなたはちょうどその理由を見つけました。

そうは言っても、最初にプレーヤーの名前を配列に明確に選択してすべてのプレーヤーのリストを取得する方法は他にありません。各挿入の前に、名前がすでに配列に含まれているかどうかを確認する必要があります(すでに含まれている場合は、再度追加しないでください)。

次に、名前のリストができたら、プレーヤーごとにSQLステートメントを実行して、次のように出現回数を合計する必要があります。

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

それはすべてかなり複雑であり、私が言ったように、データベーススキーマを実際に変更する必要があります。

于 2013-03-23T18:09:48.087 に答える
0

fetch_assocこれは( http://php.net/manual/de/mysqli-result.fetch-assoc.php )の仕事のように思えます。

mysqli を使用すると、各行が連想配列として取得されます。

一方、前に提案したように、テーブルのデザインには少し欠陥があるようです。teamチーム名とそうでないものがテーブルにplayerあり、プレーヤー名がテーブルに 1 つあるとします。

TEAM
| id | name | founded | foo |

PLAYER
| id | team_id | name | bar |

この構造では、同じチームを指す 14 人のプレーヤーを追加し、2 つのテーブルを結合することで、検索に一致するプレーヤーを抽出できます。

于 2013-03-23T18:06:05.140 に答える