簡體   English   中英

我如何將MYSQL行計入PHP中的特定行?

[英]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列僅具有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)

您需要添加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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM