我有一个表作为自动排队的文件的保管箱。
我根据两件事情订购文件的优先级,日期和时间,以及是否经过验证。
这是我的问题:
$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发现。
答案 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
列的值只有0
或1
。但如果它不止于此,那么你可以通过将每个查询的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编了列名。