iT邦幫忙

0

while迴圈中的query如何簡化?

  • 分享至 

  • xImage

延續 http://ithelp.ithome.com.tw/questions/10184049

我在這裡貼完整的語法
煩請各位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查詢簡化的空間嗎?........
我是知道將資料變為array然後用foreach轉出
但這裡我完全死腦筋

fillano iT邦超人 1 級 ‧ 2016-09-10 10:06:35 檢舉
這樣查詢是資料庫查詢做法的最壞範例之一哪...

我會建議:
1. 不要用*,要明確指定查詢欄位
2. 盡可能全部改成一個查詢就好:
timeline left join users_profile left join timeline_thumb left join timeline_comment
fillano iT邦超人 1 級 ‧ 2016-09-10 10:09:05 檢舉
...有可能出現timeline關連不到users_profile的狀況嗎?不然這兩個用join就好
火爆浪子 iT邦研究生 1 級 ‧ 2016-09-10 17:54:11 檢舉
非常感謝fillano大大協助與指示!
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答