0

目前,我有两个 MySQL 表。

第一个表存储朋友和他的图片之间的关系。

表格1

 id  |  pic_id  |  friend_id
----------------------------
 0   |  123     |  84589
 1   |  290     |  11390
 2   |  884     |  84589
 3   |  456     |  84589
 4   |  123     |  11111
 5   |  456     |  22222

表 2

第二个表存储有关图片的更多信息...

id   |  pic_id  |  title   |  color  |  detail
----------------------------------------------
0    |  123     | hello    |  black  |  brush
1    |  124     | world    |   red   |  paint
2    |  884     | sample   |  green  |  star

我使用 JOIN 来获取我需要的信息...

但是,如果我想使用上述 SQL 匹配的 pic_id 并找到具有相同 pic_id 的其他朋友 ID 怎么办?

例如,上面的 SQL 命令将给我行 0、2 和 3,pic_id 为 123、884、456。我应该使用什么 SQL 命令来循环这些 pic_id 并获取关联的friend_id?我想以 11111 为 pic_id 123 和 22222 为 pic_id 456 结束。

我已经使用以下代码来完成上述操作。它看起来效率不高,而且速度很慢。

$sql = "SELECT b.title, b.color, b.detail
FROM table1 a INNER JOIN table2 b
on a.pic_id = b.pic_id
WHERE friend_id = 84589";

$res = mysqli_query($link,$sql);
    if($res){
        while ($rec = mysqli_fetch_assoc($res)){
            $pic_id.=$rec['pic_id'].",";
            $arr[] = $rec;
        }
    } 

$each_id = explode(',',$pic_id);
    foreach($each_id as $key => $value){
        if ($value){
            $next_sql = "SELECT friend_id FROM table1 WHERE pic_id=".$value;
            $next_res = mysqli_query($link,$next_sql);

            if ($next_res){
                while($next_rec = mysqli_fetch_assoc($next_res)){
                    //do things
                }
            }
        }
    }       

对不起,如果这不清楚。请让我知道,我会澄清。

非常感谢所有帮助!

4

2 回答 2

2

试试这个(更新):

SELECT a.friend_id, a.pic_id
 FROM table1 a 
  WHERE EXISTS (SELECT 1 FROM table1 t 
          WHERE t.pic_id = a.pic_id AND t.friend_id = 84589)

检查这个 - http://sqlfiddle.com/#!3/91cdf/3

于 2012-07-07T02:55:48.600 回答
0

我认为您可以在现有加入之前通过自我加入获得想要的东西。此查询将返回一个以逗号分隔的共享图片的朋友 ID 列表。

SELECT 
  pic_detail.title, 
  pic_detail.color, 
  pic_detail.detail,
  GROUP_CONCAT(friend_pics.friend_id) as friend_ids
FROM table1 as root_pics
JOIN table1 as freind_pics 
  USING(pic_id)
JOIN table2 as pic_details
  ON root_pics.pic_id = pic_details.pic_id OR friend_pics.pic_id = pic_details.pic_id
WHERE friend_id = 84589
GROUP BY pic_detail.pic_id
于 2012-07-07T03:02:03.890 回答