php - 从由引用表连接的两个表中选择?

标签 php mysql sql

我很难弄清楚所有事情,这个问题来自这个问题,Inserting into a Table joined to another Table by a reference table? .

好吧,这个问题中解释了我想做的一半事情,我想做的其他一些事情将在这个问题中解释。

我在 Teams 表(也可以是 Projects 表)和 Members 表中有这些数据

+---------+---------------------+----------------------+
| team_id | team_name           | team_desc            |
+---------+---------------------+----------------------+
|       1 | Toronto Maple Leafs | Team is Awesome!     |
|       2 | Vancouver Kanucks   | Team Sucks!          |
|       3 | Chicago Bulls       | Team is Fine!        |
|       4 | New York Boys       | Nah! It doesn't suck |
+---------+---------------------+----------------------+

Members 表中的数据

+-----------+-----------+----------+---------------------------------+---------------+-------------+-------------------------------+------------+------------+-------------+----------+-----------------+
| member_id | firstname | lastname | address                         | state         | country     | email                         | phone      | experience | designation | username | password        |
+-----------+-----------+----------+---------------------------------+---------------+-------------+-------------------------------+------------+------------+-------------+----------+-----------------+
|         1 | Duncan    | Daniel   | P.O. Box 470, 2775 Ac Road      | NS            | Israel      | duncan@aol.in                 | 9288091790 | 1          | Script      | duncan   | debbyisaweseome |
|         2 | Ivan      | Richmond | P.O. Box 797, 906 Cursus Street | New Brunswick | Timor-Leste | ligula.tortor.dictum@Duis.com | 8087179788 | 5          | Storyboard  | ivan     | ivaniscool      |
+-----------+-----------+----------+---------------------------------+---------------+-------------+-------------------------------+------------+------------+-------------+----------+-----------------+

这两个表由这个 teams_members 表连接,

+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| teams_members_id | int(11) | NO   | PRI | NULL    | auto_increment |
| teams_id         | int(11) | NO   | MUL | NULL    |                |
| members_id       | int(11) | NO   | MUL | NULL    |                |
+------------------+---------+------+-----+---------+----------------+

如您所见,teams_idmembers_id 是来自团队和成员的外键。

现在按照提到的问题中的 upvoted 帖子中的建议,我首先将一行插入团队,然后像这样插入 team_members 表,

INSERT INTO teams(`team_name`,`team_desc`) values ("New York Boys", "Nah! It doesn't suck");
INSERT INTO teams_members (`members_id`,`teams_id`) VALUES
((SELECT member_id from members WHERE member_id = 2),
(SELECT team_id from teams WHERE team_name = "New York Boys"))

然后像这样尝试为特定成员创建的团队进行选择,

SELECT * FROM teams_members, members, teams WHERE members_id = member_id && member_id = 1;

但它没有只显示一个团队,而是给了我这个结果:

+------------------+----------+------------+-----------+-----------+----------+----------------------------+-------+---------+---------------+------------+------------+-------------+----------+-----------------+---------+---------------------+----------------------+
| teams_members_id | teams_id | members_id | member_id | firstname | lastname | address                    | state | country | email         | phone      | experience | designation | username | password        | team_id | team_name           | team_desc            |
+------------------+----------+------------+-----------+-----------+----------+----------------------------+-------+---------+---------------+------------+------------+-------------+----------+-----------------+---------+---------------------+----------------------+
|                1 |        3 |          1 |         1 | Duncan    | Daniel   | P.O. Box 470, 2775 Ac Road | NS    | Israel  | duncan@aol.in | 9288091790 | 1          | Script      | duncan   | debbyisaweseome |       1 | Toronto Maple Leafs | Team is Awesome!     |
|                1 |        3 |          1 |         1 | Duncan    | Daniel   | P.O. Box 470, 2775 Ac Road | NS    | Israel  | duncan@aol.in | 9288091790 | 1          | Script      | duncan   | debbyisaweseome |       2 | Vancouver Kanucks   | Team Sucks!          |
|                1 |        3 |          1 |         1 | Duncan    | Daniel   | P.O. Box 470, 2775 Ac Road | NS    | Israel  | duncan@aol.in | 9288091790 | 1          | Script      | duncan   | debbyisaweseome |       3 | Chicago Bulls       | Team is Fine!        |
|                1 |        3 |          1 |         1 | Duncan    | Daniel   | P.O. Box 470, 2775 Ac Road | NS    | Israel  | duncan@aol.in | 9288091790 | 1          | Script      | duncan   | debbyisaweseome |       4 | New York Boys       | Nah! It doesn't suck |
+------------------+----------+------------+-----------+-----------+----------+----------------------------+-------+---------+---------------+------------+------------+-------------+----------+-----------------+---------+---------------------+----------------------+

我的查询中是否遗漏了什么?此外,关于插入部分,有没有更好的方法来做到这一点?

最佳答案

SELECT * 
FROM teams_members tm, members m, teams t 
WHERE tm.members_id = m.member_id 
AND m.member_id = 1
AND tm.teams_id = t.team_id

关于php - 从由引用表连接的两个表中选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20065105/

相关文章:

javascript - 我怎样才能减少 if else 语句

javascript - wp_head 在插件中不起作用

java - 用于从数据库进行人脸检测和识别的计算机视觉应用程序(+Web 界面)

php - 如何通过cron替换mysql表的内容?

mysql - 如何优化这个缓慢的 MySQL 查询 - 延迟行查找?

php - MySQL如何按日期时间格式按特定日期(星期一,星期二等)选择所有行

php - 两次声明相同的路由,但根据中间件期望不同的行为

php - 使用时间戳 MySQL 按月解析 SQL 结果

sql - 在 PostgreSQL 中,如果没有则获取最小值

mysql - phpmyadmin mySQL 查询连接