将您的RAND()调用添加到ORDER BY子句中应使您可以忽略ID。试试这个:
SELECt * FROM table WHERe ... ORDER BY RAND() LIMIT 3;
在指出性能问题后,最好的选择是遵循以下方针(利用PHP):
$result = PDO:query('SELECt MAX(id) FROM table');$max = $result->fetchColumn();$ids = array();$rows = 5;for ($i = 0; $i < $rows; $i++) { $ids[] = rand(1, $max);}$ids = implode(', ', $ids);$query = PDO::prepare('SELECt * FROM table WHERe id IN (:ids)');$results = $query->execute(array('ids' => $ids));此时,您应该可以选择前3个结果。这种方法的唯一问题是处理已删除的行,如果您没有收到至少3个结果,则可能必须撞掉$ rows
var或添加一些逻辑以执行另一个查询。



