2017-05-05 53 views
1

基本上每24小時我的腳本將從table01中選擇10個隨機圖像,將數據存儲在一個單獨的table02中,然後這些數據可供我的用戶在這裏投票使用。如何結合選擇/更新準備好的語句?

經過24小時之後,腳本再次運行,並且應該使用table02中的數據更新table01,然後截斷table02從table01中選擇10個新圖片,並將數據存儲在table02中,然後再次用於投票。

是選擇10個隨機圖像

(這SQL是INSERT和SELECT)預處理語句

「兩個SQL中的一個,所以我不具備存儲數據之前,我用它」

$stmt = $dbCon->prepare(" INSERT INTO table02 " 
    . " (rating_daily_views, rating_daily_votes, rating_daily_rating, " rating_daily_category, rating_daily_imgId) " 
    . " SELECT views, votes, rating, category, id" 
    . " FROM table01 " 
    . " WHERE category IN (?) ORDER BY RAND() LIMIT 10 "); 
    $stmt->bind_param('i', $cat1); 
    $stmt->execute(); 
    $stmt->close(); 

這是我的兩條語句,如果可能的話我會合併成一條語句?

Select語句

$stmt = $dbCon->prepare("SELECT rating_daily_views, rating_daily_votes, rating_daily_rating, rating_daily_imgId " 
     . " FROM table02 "); 
$stmt->execute(); 

Update語句

$stmt = $dbCon->prepare(" UPDATE table01 SET " 
    . " views = ?, " 
    . " votes = ?, " 
    . " rating = ? " 
    . " WHERE id = ? "); 
$stmt->bind_param('iii', $views, $votes, $rating, $id); 
$stmt->execute(); 
$stmt->close(); 

回答

0

考慮UPDATE ... INNER JOIN查詢這是在MySQL的支持:

UPDATE table01 t1 
INNER JOIN table02 t2 ON t1.id = t2.rating_daily_imgId 
SET t1.views = t2.rating_daily_views, 
    t1.votes = t2.rating_daily_votes, 
    t1.rating = t2.rating_daily_rating 
+0

我居然開始做一個while循環,我剛纔在這個例子中閱讀是不好的做法......我會研究這個,是否有任何理由你ssign t1,t2?這可以做任何事情,並按我的意願使用? –

+0

事實上,這些是表別名,以避免寫完整的表名,可以是任何東西。 – Parfait

+0

哇這實際上工作,真的很簡單,一個非常好的例子,謝謝aloooot –