【问题标题】:Select percentage of rows from SQL table?从 SQL 表中选择行的百分比?
【发布时间】:2014-12-19 16:19:29
【问题描述】:

我有一个带有 PHP 脚本的站点,该脚本在返回数据中包含一个 SQL 查询,该数据由 JavaScript 文件访问。数据是一个庞大的航班数据列表,我需要能够在指定的任何一天随机选择(比方说)总航班的 40%。为了争论,让我们这样说:

$query = "SELECT * FROM `Flight_Data` WHERE DepDateTimeUTC LIKE '%1/1/14%' ";

我知道要获得随机数量的行,您只需使用ORDER BY RAND() LIMIT 40',理想情况下我想说LIMIT 40%,但这不起作用。

编辑:

$query = "SELECT * FROM `Flight_Data` WHERE DepDateTimeUTC LIKE '%1/1/14%' ";
$row = mysqli_fetch_row($result);
$total = $row[0];
$percent = $total * 0.40;
$query = "SELECT * FROM `Flight_Data` WHERE DepDateTimeUTC LIKE '%1/1/14%' LIMIT . $percent ";

【问题讨论】:

  • 您可以使用解决方法,选择计算所有记录,用 php 计算 40% 并将其用作另一个查询中的限制
  • @MarcoMura 明白了。这几乎就是它所说的here(第三个google search item
  • 取决于实施。一些 SQL99 实现(例如 PostgreSQL)支持 LIMIT 参数中的表达式。或者,如果支持,SQL2008 FETCH ONLY 语法肯定允许表达式。
  • @BadZen on mysql (official site) 你只能直接用整数做一个 LIMIT,没有计算(即使 1+1 也行不通)
  • 我现在唯一的想法是在将其传递给 LIMIT 之前获取计数并进行计算。

标签: php mysql sql limit


【解决方案1】:

你可以COUNT所有记录然后计算你需要的%这样:

$query = "SELECT COUNT(*) FROM `Flight_Data` WHERE DepDateTimeUTC LIKE '%1/1/14%' ";
$result = mysqli_query($connection,$query);
$row = mysqli_fetch_row($result));

$total = $row[0];
$percent = intval($total * 0.40);

$query = "SELECT * FROM `Flight_Data` WHERE DepDateTimeUTC LIKE '%1/1/14%' LIMIT ". $percent;
//execute your query....

【讨论】:

  • 谢谢,我正在尝试!存储我正在使用的总数: $total = mysql_fetch_row($query);这是正确的吗?
  • 试试这个:$row = mysql_fetch_row($resource); $total = $row[0];
  • 使用 mysqli_ 函数,因为所有带前缀 mysql_ 的函数都已弃用。
  • 您也可以在第一个查询中删除查询末尾的 ' 和 " 之间的空格
  • $percent 可能包含小数,因此您应该将其转换为整数
【解决方案2】:

由于您使用的是 php 脚本,因此您应该能够实现您想要的。您可以做的是,获取表中的总行数,如下所示:

SELECT count(*) AS Total FROM Flight_Data

使用 php,您可以计算出总数的 40%。

假设 $myPercent 包含计算得出的总数的 40%。您可以在限制中使用 $myPercent 的值作为

$query = "SELECT * FROM `Flight_Data`  
WHERE DepDateTimeUTC LIKE '%1/1/14%'  
LIMIT ".$myPercent;

在这里,我们从 mysql 查询字符串中转义 php 变量,这是一个很好的做法。

在 mysql 中,% 被用作通配符,所以它不能像你想象的那样被限制使用。

希望这对您有所帮助。

【讨论】:

  • 你忘记了 rand 函数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
  • 2017-03-22
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 2022-01-17
相关资源
最近更新 更多