如何组合select / update预处理语句?

时间:2017-05-05 18:56:35

标签: php sql mysqli prepared-statement

基本上每隔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();

这是我的两个陈述,如果可能的话,我愿意合并为一个?

选择陈述

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

更新声明

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

1 个答案:

答案 0 :(得分:0)

考虑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 查询:

yourcollection.update_one(
 {'_id': fakeid64}, 
 {'$pullAll': {'Dropper': yourcollection.find_one({'_id': 'fakeid64'})['Dropper'][:9000]}}
)