按rand()排序。把第一行放在最后

时间:2014-07-03 13:35:26

标签: php mysql mysqli

这有可能吗?:

选择所有行(按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>';

1 个答案:

答案 0 :(得分:0)

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

$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发送的参数。