通过rand()排序.把第一行放在最后


Order by rand(). Put first row in the end

这是可能的吗?:

Select all rows (order by rand())

创建一个while循环,输出除第一行

之外的所有行
$sql = 'SELECT id, name FROM tablename ORDER BY rand ()';
$stmt = $conn->query($sql);
while ($row = $stmt->fetch_assoc()) {
   // IF NOT FIRST ROW, DO THIS
   $text .= '<p>' . $row['id'] . '<br />' . $row['name'] . '</p>';
}

然后在末尾包含被排除的行

$text .= '<p>' . $FIRSTROW_id . '<br />' . $FIRSTROW_name . '</p>';

创建一个计数,如果它是第一个值,将其保存在变量中。然后,在循环之后,将变量与第一行的数据一起使用。

$sql = 'SELECT id, name FROM tablename ORDER BY rand ()';
$stmt = $conn->query($sql);
$i = 0;
while ($row = $stmt->fetch_assoc())
{
    if ( $i == 0 )
        $firstrow = $row;
    else
        $text .= '<p>' . $row['id'] . '<br />' . $row['name'] . '</p>';
    $i++;
}
if ( $firstrow )
    $text .= '<p>' . $firstrow['id'] . '<br />' . $firstrow['name'] . '</p>';

编辑:从你在评论中所说的,你可以在AJAX中传递第一行作为参数,并在你的查询中排除它:

$sql = "SELECT id, name FROM tablename WHERE id != '".intval($_GET['id'])."' ORDER BY rand ()";
$stmt = $conn->query($sql);

$_GET['id']将是您通过AJAX发送的参数。