我试图在垃圾箱中随机选择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,我之前使用过这个,而不是分组。任何帮助表示赞赏!
答案 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)";