数据不一致,使用MySQL,PHP,Yii2

时间:2015-06-08 07:36:17

标签: php mysql yii

我正在构建一个跟踪图像视图记录的系统。

此项目中的主要表是视图表和max_view表。视图表保存视图的日期,时间和数量。并且max_view表记录了可以查看图像的最大数量。

每次加载图像时。我将日期和时间存储到视图表中。并且将从max_view表中的图像的总最大视图减去1。

表示例:

查看表

id  | image_id |  datetime             |  username
1     1            2015-03-02 02:30:34     user1
2     1            2015-03-02 02:32:34     user2
3     2            2015-03-03 01:40:34     user1

Max_view表

id   |   max_view   | image_loc
1        1000         /image/image_1.jpg
2        500          /image/image_2.jpg

我在以下yii2框架中的SQL查询:

随机选择图像:

$row = Yii::$app->db->createCommand("SELECT id FROM image_source ORDER BY RAND()")->queryOne();

插入视图表:

Yii::$app->db->createCommand()->insert('view', [
    'image_id' => $row['image_id'],
    'datetime' => $datetime,
    'username' => $user,
])->execute();

更新最大观看次数:

Yii::$app->db->createCommand("UPDATE max_view SET max_view=max_view-1 WHERE id=$image_id")->execute();

我的问题是,当有大量用户同时查看时。数据不一致。插入视图表的数据往往更有时候。例如,如果有10个人观看了相同的图像。视图表应该有10个记录,max_view表将从该图像的最大视图总数减去10。但不知何故,它有时只会从max_view中减去9。

如果我在我的本地机器上测试它,它可以完美地工作。我可以知道如何解决这个问题吗?我怀疑服务器速度不够快,无法捕获max_view数据。如何使其更加一致?

1 个答案:

答案 0 :(得分:1)

如果您尝试同时从不同的主机编辑SQL数据库中的数据,则通常无法正常工作。 而不是只需将一个新条目添加到一个只显示“1”的表中,并且每次都将图像ID计入并计算,直到它们达到1000.