我有两张桌子
| Team | | Player |
+-----------+ +------------+
| id | | player_id |
| player_id | | player |
| captain |
我有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 |
我有数百支球队,每支球队由8名球员组成,平均每名球员可以在20支球队中,任何球员都可以成为球队的队长。
例如:
我想在team
中搜索William Mathiss
是队长(C
),George Partick
是同一团队中的玩家。在上面的示例中,他们都在团队1
中。
我想把它放在PHP搜索表单中,所以我有两个字段用于播放器,另一个用于队长。
答案 0 :(得分:0)
你可以试试这个:
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'
答案 1 :(得分:0)
我会先改变结构。 目前你有用户,团队和玩家吗?球队不应该包含球员。如果用户可以成为团队的队长,成为团队的正常成员并且同时在多个团队中,则应该为团队,用户和具有两个主表的外键的关系表创建一个表。 这样做时,您可以加入用户表两次,并由用户分别作为队长和团队成员进行过滤。你可以在不改变结构的情况下完成,但我强烈推荐。 在PHP中,您可以将PDO用于准备好的语句,制作一个" bindParam()"或" bindValue()"两次(或者只是将一个数组传递给" execute()"但是你不能先验证数据类型。)
答案 2 :(得分:0)
这就是我想要在团队中找到相同的两名球员,现在我只需要为其中一名球员添加属性队长。
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'