Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从MySQL表中选择行数百分比的最简单方法?_Php_Mysql - Fatal编程技术网

Php 从MySQL表中选择行数百分比的最简单方法?

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中使

我有一个脚本,它有一个GET变量:
$\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。