[英]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_id
有INNER 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.