我如何将MYSQL行计入PHP中的特定行?

时间:2012-06-12 23:40:35

标签: php mysql count sql-order-by row

我有一个表作为自动排队的文件的保管箱。

我根据两件事情订购文件的优先级,日期和时间,以及是否经过验证。

这是我的问题:

$dropcount = mysql_query("SELECT COUNT(*) FROM queue WHERE status=2 OR status=3 
OR status=4 ORDER BY authorised DESC, timestamp DESC;");

我需要做的是计算用户当前文件前面的行数,因为这将计算每一行,包括当前用户背后的文件。

谢谢。

我的表格如下:

http://tabbidesign.com/table.png

这种方式的工作方式是添加一个文件,将其添加到队列中。但是,如果该文件被授权,则优先于未验证的文件,这意味着即使在一些未经验证的苍蝇之后添加它也需要进行计数。

状态列说明文件是否: - 处理过程

- 在Dropbox中提问

由用户取消

由管理员

取消

编辑: Ok @ curtisdf的答案如果我做了以下的话会有效:

$countauth =
SELECT COUNT(*)
FROM queue
WHERE (status=2 OR status=3 OR status=4)
AND authorised=1
AND timestamp < $timestamp

$countnorm =
SELECT COUNT(*)
FROM queue
WHERE (status=2 OR status=3 OR status=4)
AND authorised=0
AND timestamp < $timestamp

$actualcount = $countnorm + $countauth;

如何将此合并到一个查询中,或者这是不可能的?

THE SOLOUTION

SELECT COUNT(*)FROM queue WHERE (status=2 OR status=3 OR status=4)AND 
timestamp < $timestamp OR authorised=1

由@curtisdf发现。

2 个答案:

答案 0 :(得分:2)

假设您的idqueue列是主键并且它是自动递增的,那么使用它来过滤掉以后的ID呢?类似的东西:

SELECT COUNT(*) 
FROM queue 
WHERE status=2 OR status=3 OR status=4 
AND idqueue < $currentFileId
ORDER BY authorised DESC, timestamp DESC
编辑:要知道如何回答有点困难,因为你的表有很多列,而且不清楚你们所使用的是什么。例如,与status列相比,authorized列的含义是什么?但无论如何,由于您的ORDER BY对此查询无关紧要,并且由于您正在寻找在给定文件之前出现的授权文件,因此如何:

SELECT COUNT(*)
FROM queue
WHERE (status=2 OR status=3 OR status=4)
AND authorised=1
AND timestamp < $timestamp
编辑2:好的,现在我看到你在追求什么。 :-)如果您刚刚删除了“AND authorized = X”部分,我相信您可以在一个查询中执行此操作。这假设您的authorised列的值只有01。但如果它不止于此,那么你可以通过将每个查询的WHERE ... AND ...部分包装在它们自己的括号中来实现,如下所示:

SELECT COUNT(*)
FROM queue
WHERE (
    (status=2 OR status=3 OR status=4)
    AND authorised=1
    AND timestamp < $timestamp
) OR (
    (status=2 OR status=3 OR status=4)
    AND authorised=0
    AND timestamp < $timestamp
)

这可以进一步简化:

SELECT COUNT(*)
FROM queue
WHERE (status=2 OR status=3 OR status=4)
AND timestamp < $timestamp
AND (authorised=1 OR authorised=0)

答案 1 :(得分:2)

您需要添加where语句:

$dropcount = mysql_query("SELECT COUNT(*) FROM queue WHERE (status=2 OR status=3
OR status=4) AND authorised=1 and timestamp<'$currentUserTimeStamp'  ORDER BY 
authorised DESC, timestamp DESC;");

如果您不知道当前用户时间戳,则需要先选择该时间戳。

$result = mysql_query("select `timestamp` from queue where (status=2 or status=3 or 
status=4) and `userid`='$user'");
$row = mysql_fetch_row($result);
$currentUserTimeStamp = $row[0];

当然,我已经为用户ID编了列名。