从表中选择随机行,确保该行未被评级

时间:2016-02-14 22:52:11

标签: php mysql sql

我从具有连续记录的表中选择一个随机行:

  $stmt = $db->prepare("SELECT COUNT(*) FROM $table");
  $stmt->execute();
  $stmt->bind_result($total);
  $stmt->fetch();
  $stmt->close();

  $rand = mt_rand(1,$total);

  $try = 0;

  do {

    $stmt = $db->prepare("SELECT id,link,(select count(*) from $table2 where img_id=? AND ip=?) FROM $table WHERE id = ?");
    $stmt->bind_param("isi",$rand,$ip,$rand);
    $stmt->execute();
    $stmt->bind_result($id,$link,$count);
    $stmt->fetch();
    $stmt->close();

    $try++;

  } while ($try < 10 && $count > 0);

我根据用户的IP检查用户是否对特定内容进行了评分。

我在mt_rand(1,$total)的第一条记录和最后一条记录之间得到一个随机数,然后我选择该行。

但是,用户之前可能已经对该特定项目进行了评分,然后我需要重新选择&#39;或尝试另一个随机行,在这里我尝试10次然后放弃该程序。

在SQL中以任何方式更好地做到这一点,或者确保我选择一个他们之前从未评价过的但没有完全低效的尝试做什么呢?我无法使用ORDER BY RAND(),因为它太慢了。

0 个答案:

没有答案