如何从SQL查询选择中选择随机行?

Mat*_*ell 1 html php mysql sql

如何从SQL数据库查询中随机选择一行?我的意思是:

从table1中选择所有类别为"green"的东西:

$stmt = $db->query('SELECT * from table1 WHERE Category LIKE "%green%"');
Run Code Online (Sandbox Code Playgroud)

然后从该选择中随机显示一行(而不是显示此选择中的每一行,如下所示)

while($rows = $stmt->fetch()){
     echo "<tr><td>". $rows['Number'] . "</td><td>" . $rows['Content'] . "</td></tr>";
};
Run Code Online (Sandbox Code Playgroud)

Geo*_*ins 5

在合理大小的数据集中,随机排序您的行并选择第一个:

...ORDER BY RAND() LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

您的陈述将成为:

$stmt = $db->query(
    'SELECT * from table1
     WHERE Category LIKE "%green%"
     ORDER BY RAND() LIMIT 1;'
);
Run Code Online (Sandbox Code Playgroud)

如果在查询中缩小选择范围,则无需使用混乱的过程从PHP代码中的结果集中提取单行.

如果您的数据集非常大,请考虑按照Tobias Hagenbeek的建议执行多个查询:

  1. COUNT() 匹配的行.
  2. 在PHP中,选择1和结果之间的随机数COUNT().
  3. 执行新查询以选择指定的行:

    ...LIMIT <random number>, 1;

最后,如果您只需要一个任意行并且随机性/唯一性不是问题,请考虑每次按照Gordon Linoff的建议从表中选择第一行:

...LIMIT 1;
Run Code Online (Sandbox Code Playgroud)