簡體   English   中英

Mysql連接三個表的問題

[英]Mysql join three tables problem

我正在使用三個看起來像的mysql表:

會員賬戶表

|       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   |

我想加入這三個表並獲取查詢結果,該結果將列出我添加到朋友列表中的用戶以及同時添加到列表中的用戶,所有這些用戶必須具有“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 EXPLAIN:

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 

然后發回執行多長時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM