3

最近、MySQL データベースで必要なクエリ結果を取得するのに苦労しています。現時点では、問題がデータベースにあるのか、実際のクエリにあるのかわかりません。

基本的には、これらのテーブルを持つサッカー選手データベースです。

(player): player_id (primary), playerName
(match): match_id (primary), playerID1, playerID2, playerID3, etc..

データベースにクエリを実行して、一致データベースの属性が返されるようにしたいのですが、ID ではなくプレイヤーの名前が返されます。

1 人のプレーヤーに対しては機能させることができますが、他のプレーヤーには機能しません。コードは次のとおりです。

SELECT p.Name 
FROM `match` m
inner join `player` p on p.player_id=m.playerID1

しかし、2 番目のプレーヤーを追加すると、p.Name既にマップされてplayerID1いるため、機能しません。

データベースがうまく設計されていないと思われますが、推奨事項は大歓迎です!

4

1 に答える 1

6

そのデータベース設計はあなたの頭痛の種を引き起こしています。Matchとの間の関係を分解して、との両方を持つテーブルをPlayer追加する必要があります。これにより、それぞれにフィールドを持たなくても、できるだけ多くのプレーヤーをにリンクできるようになります。MatchPlayerMatchIDPlayerIDMatch

ただし、クエリの場合は、次のようなことを行う必要があります。

SELECT p.Name 
FROM `match` m
INNER JOIN `player` p 
    ON p.player_id IN (m.playerID1, m.playerID2, m.playerID3) //etc

デモSQLFiddleはこちら

于 2012-05-25T08:29:00.077 に答える