while循环中的query如何簡化?

我在這裡貼完整的語法 煩請各位mysql大師鑑定

$gettimeline = mysql_query("SELECT * FROM `timeline`
LEFT JOIN `users_profile` USING (id)
ORDER BY `addtime_timeline`  DESC
");

以上是找timeline資料表並以addtime_timeline排列

while ($row=mysql_fetch_array($gettimeline)){ 
印出timeline的欄位資料
}

以上是印出timeline資料的循环

在循环中我會加入query 如下

while ($row=mysql_fetch_array($gettimeline)){ 

$GETthumb1 = mysql_query("SELECT * FROM `timeline_thumb`
WHERE `id` = '".$_SESSION['userid']."'
AND `by_timeline_id` = '".$row['timeline_id']."'
AND `thumb_type` = '1'
");

$pub_GETthumb1 = mysql_query("SELECT * FROM `timeline_thumb`
WHERE `by_timeline_id` = '".$row['timeline_id']."'
AND `thumb_type` = '1'
");

$pub_GETinfo = mysql_query("SELECT * FROM `timeline_thumb`
JOIN `users_profile` USING (id)
WHERE  `by_timeline_id` = '".$row['timeline_id']."'
ORDER BY `addtime_thumb` DESC
");

$get_comment = mysql_query("SELECT * FROM `timeline_comment`
JOIN `users_profile` USING (id)
WHERE `re_timeline_id` = '".$row['timeline_id']."' 
ORDER BY `addtime_comment` DESC ");

$get_comment_num = mysql_query("SELECT * FROM `timeline_comment`
WHERE `re_timeline_id` = '".$row['timeline_id']."'
");

}

GETthumb1是找timeline_thumb資料表中與timeline(timeline_id)相符的id(by_timeline_id)有幾筆(抓出用戶自身有幾筆)。
pub_GETthumb1則是總共有幾筆。
pub_GETinfo是抓出用戶的資料與users_profile (id)對應。
get_comment是抓出timeline_comment資料表中與timeline(timeline_id)相符的id(re_timeline_id)有幾筆並抓出用戶的資料與users_profile (id)對應。
get_comment_num是抓出總共有幾筆。

有將mysql查詢簡化的空間嗎?........

阅读 2.6k
1 个回答

所述幾筆是要最終的結果數量還是沒條記錄.

問題所描述的查詢使用 sql 查詢 看起來分別應該是這樣的

select * from timeline as tl
left join timeline_thumb as tt on tl.timeline_id=tt.by_timeline_id
where id=? and tt.thumb_type='1'


select * from timeline as tl
left join timeline_thumb as tt on tl.timeline_id=tt.by_timeline_id
where tt.thumb_type='1'


select * from timeline as tl
left join timeline_thumb as tt on tl.timeline_id=tt.by_timeline_id
left join users_profile as up on tt.id=up.id
order by tt.addtime_thumb desc


select * from timeline as tl
left join timeline_comment as tc on tl.timeline_id=tc.re_timeline_id
left join users_profile as up on tc.id=up.id
order by tc.addtime_comment desc


select * from timeline as tl
left join timeline_comment as tc on tl.timeline_id=tc.re_timeline_id

這每條語句實際中也有很多重疊的, 也可以再次剝離出來, 不建議先查出來在 while 遍歷繼續查詢, 這樣造成的 IO 開銷很大.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题