3

自動的にキューに入れられるファイルのドロップボックスとして機能するテーブルがあります。

ファイルの優先順位は、日付と時刻、および検証済みかどうかという 2 つの要素に基づいて決定します。

これが私のクエリです:

$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

これが機能する方法は、ファイルがキューに追加された場合です。ただし、そのファイルが承認されている場合は、検証されていないファイルよりも優先されます。つまり、検証されていないハエの後に追加されたとしても、カウントする必要があります。

ステータス列には、ファイルの状態が次のように表示されます。 -処理中

-ドロップボックスでのキューイング

・お客様都合によるキャンセル

・管理人がキャンセルしました

編集:私が次のことをすれば、@ 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;

これを 1 つのクエリにマージするにはどうすればよいですか、それとも不可能ですか?

ソリューション

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

@curtisdf によって発見されました。

4

2 に答える 2

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" の部分を削除しただけなら、1 つのクエリで実行できると思います。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)
于 2012-06-12T23:51:11.047 に答える
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 の列名を作成しました。

于 2012-06-12T23:53:25.147 に答える