鍍金池/ 問(wèn)答/PHP/ 如果重複,如何回到上一個(gè)步驟再繼續(xù)?

如果重複,如何回到上一個(gè)步驟再繼續(xù)?

$public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

 $exist = mysqli_num_rows($pdo->query(
      "SELECT * FROM `product`
      WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
if($exist == 0){
$pdo->query(
      "INSERT INTO ``
      (
        ``
      )
      VALUES
      (
        '{}'
      )
      "
    );
 }

如果找到的結(jié)果是大於0
那我如何回到上面再產(chǎn)生一組新的號(hào)碼,然後再重新走一次?

回答
編輯回答
膽怯

while continue break;

2017年6月20日 19:36
編輯回答
純妹

把這個(gè)操作封裝成一個(gè)函數(shù),如果查詢結(jié)果大于0就再調(diào)用自己一次,直到滿足你的條件再退出

2017年4月7日 15:03
編輯回答
真難過(guò)
// 1. 找到可用的id
do{
    $public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

     $exist = mysqli_num_rows($pdo->query(
          "SELECT * FROM `product`
          WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
}while($exist > 0);
// 2. 插入數(shù)據(jù)
INSERT INTO ...

以上方法有一個(gè)問(wèn)題,在1和2之間如果有新的重復(fù),盡管概率很低,但是插入的時(shí)候依然會(huì)報(bào)錯(cuò)。
改進(jìn):

do{
    $public_prod_id = 'C'.rand(1000000000,9999999999);
    $_SESSION['public_prod_id'] = $public_prod_id;

     $exist = mysqli_num_rows($pdo->query(
          "SELECT * FROM `product`
          WHERE `public_prod_id` = '{$_SESSION['public_prod_id']}' "
    ));
    if($exist == 0){
        try{
            Insert ...
        }catch(\Exception $e){
            $exists = 1;
        }
    }
}while($exist > 0);

這樣其實(shí)還有一個(gè)問(wèn)題,隨著數(shù)據(jù)量的增大,這個(gè)函數(shù)重復(fù)執(zhí)行的次數(shù)會(huì)越來(lái)越多。

  1. 使用一個(gè)id池,每次從id池中取id,用過(guò)立即去掉
  2. 調(diào)整id的生成策略
2017年5月8日 23:52