php - while循环中的query如何簡化?
阿神
阿神 2017-04-11 10:21:26
[PHP讨论组]

我在這裡貼完整的語法 煩請各位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查詢簡化的空間嗎?........

阿神
阿神

闭关修行中......

全部回复(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 開銷很大.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号