2017-05-05 49 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 –