目前,我有兩個MySQL表。MySQL如何通過JOIN獲取更多信息?
第一張表存儲朋友和他的照片之間的關係。
表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
二表存儲有關的PIC的詳細信息...
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,並且找到其他friend_id的pic_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
}
}
}
}
對不起,如果這不清楚。請讓我知道,我會澄清。
非常感謝所有幫助!
風格的筆記(以及比風格更合理一點...)。您正在創建一個逗號分隔的pic_ids列表,就像您要在IN()子句中使用它們一樣,但只是將它們分解並隨後運行一個查詢;在一個循環內......通常,循環內的任何查詢都是巨大的紅旗(即你來這裏是正確的;-)。作爲一個細節,你應該在構建一個數組時創建一個列表(然後使用implode()爲IN()子句創建一個字符串;但是你會在答案中找到更好的建議:-) – 2012-07-07 03:07:37
你的提示!你知道的越多... – 2012-07-07 03:42:27