目前,我有两个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查找OTHER friend_id,该怎么办?
例如,上面的SQL命令将使用pic_id的123,884,456给出行0,2和3.我应该使用什么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
}
}
}
}
对不起,如果不清楚的话。请让我知道,我会澄清。
非常感谢所有帮助!
答案 0 :(得分: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)
答案 1 :(得分:0)
我认为您可以在现有联接之前通过自我加入获得所需内容。此查询将返回共享图片的逗号分隔的friend_ids列表。
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