[英]How would I count MYSQL rows down to a specific row in PHP?
我有一個表作為自動排隊的文件的Dropbox。
我根據兩件事,即日期和時間以及是否經過驗證來命令文件的優先級。
這是我的查詢:
$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
這種方式的工作方式是添加一個文件,將其添加到隊列中。 但是,如果該文件已獲得授權,則它優先於未驗證的文件,這意味着即使在一些未經驗證的蒼蠅之后添加它,也需要對其進行計數。
狀態列指出文件是否為:-Being processed
- 在Dropbox中提問
- 由用戶限制
- 由管理員解決
編輯:好的@ 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;
我怎么能把它合並成一個查詢,或者這不可能?
解決方案
SELECT COUNT(*)FROM queue WHERE (status=2 OR status=3 OR status=4)AND
timestamp < $timestamp OR authorised=1
由@curtisdf發現。
假設你的idqueue
列是主鍵並且它是自動遞增的,那么使用它來過濾掉以后的ID呢? 就像是:
SELECT COUNT(*)
FROM queue
WHERE status=2 OR status=3 OR status=4
AND idqueue < $currentFileId
ORDER BY authorised DESC, timestamp DESC
編輯:知道如何回答有點困難,因為你的表有很多列,並且不清楚你使用它們的是什么。 例如,與authorized
列相比, status
列的含義是什么? 但無論如何,由於您的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)
您需要添加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編了列名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.