gpt4 book ai didi

Mysql连接三表问题

转载 作者:行者123 更新时间:2023-11-29 09:15:51 25 4
gpt4 key购买 nike

我正在使用三个 mysql 表,如下所示:

成员(member)帐户表格

|       id     |     name    |   status   |
-------------------------------------------
| 1 | mike | 0 |
| 2 | peter | 1 |
| 3 | john | 1 |
| 4 | any | 1 |

好友列表表:

|    myid     |    user     |    date    |
------------------------------------------
| 10 | 2 | 2010-01-04 |
| 3 | 10 | 2010-09-05 |
| 4 | 10 | 2010-10-23 |

用户图库表:

|    fotoid     |    userid     |    pic1    |
------------------------------------------
| 101 | 2 | 1.jpg |
| 102 | 3 | 2.jpg |
| 103 | 4 | 3.jpg |

我想加入这三个表并获取查询结果,该结果将列出我添加到 friend 列表中的用户以及让我同时添加到列表中的用户,所有这些用户的状态必须为“1” '从成员表中显示他们的照片从图库表中。

在此示例中,我的 ID 是“10”。在图库表中,“MyID”表示已将其他用户添加为好友的用户,而“user”是已添加用户的 ID。

此示例中的最终结果应如下所示:

|    id    |   name   |   status   |    pic1   |
------------------------------------------------
| 2 | peter | 1 | 1.jpg |
| 3 | john | 1 | 2.jpg |
| 4 | any | 1 | 3.jpg |

我怎样才能做到这一点?

mysql 解释:

id  |  select_type     |  table  |    type   |   possible_keys   |  key    |   key_len   |    ref    |    rows   |    extra                            
-------------------------------------------------------------------------------------------------------------------------------------------------
1 | primary | g | ALL | id | NULL | NULL | NULL | 7925 | Using where
1 | primary | a | eg_ref | id | id | 4 | g.id | 1 | Using where
2 |DEPENDENT SUBQUERY| a2 | index | id | NULL | NULL | NULL | 90734 | Using index; Using temporary; Using filesort;
2 |DEPENDENT SUBQUERY| f | index | rds_index |rds_index| 8 | NULL | 138945 | Using where;Using index;Using join buffer

最佳答案

SELECT a.id, 
a.name,
a.status,
g.pic1
FROM accounts a
JOIN galleries g
ON g.userid = a.id
WHERE a.id IN (SELECT a2.id
FROM accounts a2
JOIN friends f
ON ( f.myid = a2.id
OR f.user = a2.id )
WHERE ( f.myid = 10
OR f.user = 10 )
GROUP BY a2.id)
and a.status = 1

编辑 1

现在让我们使用子查询,暂时松开分组依据:

确保您在这些列上有索引:

accounts.id
friends.myid
friends.user

并运行此查询:

SELECT a2.id 
FROM accounts a2
JOIN friends f
ON f.myid = a2.id
WHERE f.user = 10
UNION ALL
SELECT a2.id
FROM accounts a2
JOIN friends f
ON f.user = a2.id
WHERE f.myid = 10

然后发回执行了多长时间。

关于Mysql连接三表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4239821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com