从表中随机选择百分比的条目

时间:2013-08-23 14:19:34

标签: php ms-access

我试图在垃圾箱中随机选择30%的门票。下面的代码适用于30%,但是当我添加“ORDER BY RND(INT(NOW * ID)-NOW * ID)”时,我收到错误。

使用:

$result1 = "SELECT MainBin.Assignee, Count(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber FROM  MainBin GROUP BY MainBin.Assignee";
$rs1=odbc_exec($conn,$result1);
while($row = odbc_fetch_array($rs1))
{
$Assignee = "". $row['Assignee'];
$CountOfIncidentNumber = ceil($row["CountOfIncidentNumber"]);
$result2 = "INSERT INTO TicketBin (IncidentNumber)
SELECT TOP $CountOfIncidentNumber IncidentNumber FROM MainBin 
WHERE Assignee = '$Assignee'";
$rs2=odbc_exec($conn,$result2);
}

不起作用:

 $result1 = "SELECT MainBin.Assignee, Count(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber FROM  MainBin GROUP BY MainBin.Assignee ORDER BY RND(INT(NOW*ID)-NOW*ID)";
 $rs1=odbc_exec($conn,$result1);

我有和自动编号字段命名为ID,我之前使用过这个,而不是分组。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

假设当您“收到错误”时表示错误

  

您尝试执行的查询不包含指定表达式“RND(INT(NOW()* ID)-NOW()* ID)'作为聚合函数的一部分。

然后你可以尝试使用像这样的方法

SELECT
        Assignee,
        CountOfIncidentNumber
FROM
        (
            SELECT 
                    MainBin.Assignee, 
                    COUNT(MainBin.IncidentNumber) * .3 AS CountOfIncidentNumber,
                    MIN(ID) AS MinOfID
            FROM MainBin 
            GROUP BY MainBin.Assignee
        )
ORDER BY RND(INT(NOW*MinOfID)-NOW*MinOfID)

编辑重新评论

听起来好像你需要保留原始代码而只是使用它:

$result2 = "INSERT INTO TicketBin (IncidentNumber)
SELECT TOP $CountOfIncidentNumber IncidentNumber FROM MainBin 
WHERE Assignee = '$Assignee' ORDER BY RND(INT(NOW*ID)-NOW*ID)";