繁体   English   中英

Mysql球队表,选择队长和其他球员

[英]Mysql table of teams, Selecting the captain and another player

我有两个桌子

|   Team    |        |   Player   |
+-----------+        +------------+
| id        |        | player_id  |
| player_id |        | player     |
| captain   |        

我在INNER JOIN players ON Team.player_id = Player.player_idINNER JOIN players ON Team.player_id = Player.player_id

例如,将显示:

  id |        player         |    captain
 ----+-----------------------+-------------
   1 |    Jeremiah Gilbert   |
   1 |    John Sidbury       |
   1 |    George Morrell     |
   1 |    William Mathiss    |       C
   1 |    John Parlement     |
   1 |    William Lester     |
   1 |    George Partick     |
   1 |    William Thornnton  |

我有数百支球队,每支球队由八名球员组成,平均一个球员可以在20支球队中,任何一名球员都可以成为球队的队长。

例如:我想在搜索team在那里William Mathiss是机长( C )和George Partick是在同一支球队的球员。 在上面的示例中,他们俩都在团队1

我将其放在PHP搜索表单中,因此我将有两个字段,一个用于播放器,另一个用于队长。

您可以尝试以下方法:

SELECT t.id,
       p.player,
       t.captain
FROM Team t
    JOIN Player p ON (t.player_id = p.player_id)
      Where p.player = 'Player_name'
        AND t.captain = 'Captain_Name'

我将首先更改结构。 当前您有用户,团队和参与者吗? 队伍中不应有队员。 如果用户可以是一个团队的队长,一个团队的普通成员并且一次处于多个团队中,那么您应该有一个团队,用户表和一个带有指向两个主表的外键的关系表。 这样做时,您可以两次加入用户表,并分别由用户作为队长和团队成员进行筛选。 您可以在不更改结构的情况下完成此操作,但我强烈建议。 在PHP中,您可以使用PDO编写预备语句,两次执行一次“ bindParam()”或“ bindValue()”(或仅将一个数组传递到“ execute()”中,但是您不能先验证数据类型) )。

这是我在团队中找到相同的两名球员时想到的,现在,我只需要为其中一名球员添加属性队长即可。

SELECT DISTINCT
    a.id,
    b.player,
    c.player
FROM
    Team a 
        JOIN player b ON a.player_id=b.player_id
        JOIN Team d
        JOIN player c ON d.player_id=c.player_id
WHERE
     b.player = 'Player one' AND c.player = 'Player two' 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM