申し訳ありませんが、ページにアクセスすると、まずテーブル B からランダムな単語の ID (フィールド: now_id) を見つけてから、テーブル A に移動してランダムな単語を見つける必要があります。
このランダムな単語のID(now_id)をテーブルBから選択すると、now_id+1が生成されます。
しかし、今の問題は、瞬間的に膨大な数のアクセスがあったため、テーブル B の更新が完了する前に再度選択されてしまう可能性があることです。 。 。非常に混乱していますが、更新があるので、更新が完了した後に選択を実行する必要はありませんか? 更新により自動的に書き込みロックが追加され、更新が完了した後に選択を実行する必要があります。
次に、ブロックを発生させずに、選択する前に更新できるようにしたいと思います。 。
$sql = "select * from fan_keyword where id=(select fval from hao_fan_temp where fkey='keyword_produce_id' limit 1)";$result = mysql_query($sql);$arr = mysql_fetch_assoc($result);if(!empty($arr)){ $keyname = $arr['name']; $idd = intval($arr['id']) + 1;}else{ $sql = "select * from fan_keyword limit 1"; $result = mysql_query($sql); $arr = mysql_fetch_assoc($result); $keyname = $arr['name']; $idd = intval($arr['id']) + 1;} $sql1 = "update hao_fan_temp set fval='$idd' where fkey='keyword_produce_id'"; mysql_query($sql1) or exit('auto_produce: 保存当前抽取的词ID失败');
選択時に読み取りロックがあるはずですが、同時に他のプロセスの読み取り操作をブロックするわけではないので、まだ前のデータを読み取ります