Php 从MySQL表中选择行数百分比的最简单方法?
我有一个脚本,它有一个GET变量:Php 从MySQL表中选择行数百分比的最简单方法?,php,mysql,Php,Mysql,我有一个脚本,它有一个GET变量:$\u GET['percentage'] 我有一个MySQL数据表 现在假设这个表中有100行数据 在伪代码中: $_GET['percentage'] = 10; SELECT 10% of data from table order by rand() 从表中选择数据 现在是否可以从表中选择随机数据的$\u GET['percentage'] 例如(同样在伪代码中): 如果这是可能的,我怎么做呢?如果您有自动递增的ID字段,您可以使用它 在MySQL中使
$\u GET['percentage']
我有一个MySQL数据表
现在假设这个表中有100行数据
在伪代码中:
$_GET['percentage'] = 10;
SELECT 10% of data from table order by rand()
从表中选择数据
现在是否可以从表中选择随机数据的$\u GET['percentage']
例如(同样在伪代码中):
如果这是可能的,我怎么做呢?如果您有自动递增的ID字段,您可以使用它
在MySQL中使用ID_字段,可能最容易在两个查询中实现这一点。首先,获取表中的行数:
SELECT COUNT(*) FROM MyTable;
然后准备查询以获取随机行:
SELECT ... FROM MyTable ORDER BY RAND() LIMIT ?;
然后执行准备好的查询并发送计数除以10的值
并非每个问题都需要通过一个查询来解决
下面是一个PHP脚本示例,经过编辑使用旧的mysql扩展
<?php
// Get the total number of rows in the table.
$sql = "SELECT COUNT(*) FROM Kingdoms";
$result = mysql_query($sql);
$row = mysql_fetch_array($result);
$rows_in_table = $row[0];
// We only want a portion of the rows, specified by the user
// choice of percentage. The count we want is therefore equal
// to the total number of rows in the table multiplied by the
// desired percentage.
$percentage = intval($_GET["percentage"]) / 100.0;
$count = intval(round($rows_in_table * $percentage));
// LIMIT makes the query return at most the number of rows specified.
// Sort randomly first (if the table has too many rows this will be slow),
// then return the first $count rows.
$sql = "SELECT * FROM Kingdoms ORDER BY RAND() LIMIT {$count}";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
print_r($row);
}
从mytable中选择columnvalue,其中RAND()可能是此事件引发的解决方案
drop event OEAuditEvent;
DELIMITER $$
CREATE EVENT OEAuditEvent
ON SCHEDULE EVERY 1 SECOND
STARTS '2012-09-05 09:00:00'
DO
BEGIN
DECLARE a CHAR(20);
DECLARE b,c,d INT;
DECLARE done INT DEFAULT FALSE;
IF CURRENT_TIME() = '23:40:00' THEN
begin
DECLARE cur CURSOR FOR select OE_User,count(OE_User) from RNCM_Status where date(OE_Date)=CURDATE() group by OE_User;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO a, b;
SET c=ceil((b*5)/100);
IF done THEN
LEAVE read_loop;
ELSE
insert into OE_Audit(MDN,CAF,UploadedDate,OEUser,OEDate,UserCount,QCCount,intime) select MDN,CAF,UploadedDate,OE_User,OE_Date,b,c,now() from RNCM_Status where OE_User=a and date(OE_Date)=CURDATE() order by rand() limit c;
END IF;
END LOOP;
CLOSE cur;
end ;
END IF;
END $$
DELIMITER ;
+1“不是每个问题都需要通过一个查询来解决。”:)对不起,我对MySQL真的很陌生。我将如何准确地实现这一点?还有,有没有可能得到一个百分比中的一个百分比?例如,$\u获得33%的['percentage'”
谢谢,但我没有使用PDO,它看起来非常混乱。很抱歉打扰你,但是你能给我举一个没有PDO的例子吗?如果这让人困惑的话,可能还有注释。我使用旧的mysql扩展重写了这个示例。但我还是建议学习如何使用mysqli或PDO。非常感谢,是的,我将研究mysqli和PDO。