0

私は含むテーブルを持っています

  • ID
  • 更新番号

ユーザーは、すでにダウンロードした ID のリストとその更新番号を持っています。毎回ダウンロードするのに必要な ID のみをユーザーに提供したい (これは新しい ID - 彼がまだダウンロードしていない ID または更新された ID) です。これをもたらすクエリを作成したいと思います。例として、ユーザーが 3 つの ID をダウンロードしたとします。

  • 最初: ID = 1、更新 = 0;
  • 2 番目: ID = 2、更新 = 0;
  • 3 番目: ID = 3、更新 = 0;

だから今、私はサーバーでIDを更新したいので、ユーザーはそれを再度ダウンロードするので、最初のIDの更新番号を1にします(1の場合は2または3以上にします)。

必要な ID のみを取得するために、ユーザーがサーバーに送信するクエリが必要です。

私はこのクエリを試しました:

SELECT * FROM idtable WHERE (id <> 1 AND update <> 0) AND (id <> 2 AND update <> 0) AND (id <> 3 AND update <> 0)

しかし、これは有効ではありません。(例を見ている場合は、サーバーから更新したため、ID番号1のみが返されるはずです)。

私を助けてください!!

4

3 に答える 3

2

すでにデータベースと同じバージョンのパッケージを除外する場合は、次を使用できます。

SELECT * 
FROM idtable 
WHERE
    CASE id
        WHEN 1 THEN IF(update > 0, TRUE, FALSE)
        WHEN 2 THEN IF(update > 0, TRUE, FALSE)
        WHEN 3 THEN IF(update > 0, TRUE, FALSE)
        ELSE TRUE
    END
于 2012-09-19T20:12:56.323 に答える
0

ダウンロードする ID を取得するクエリは単純です。

SELECT *
  FROM idtable
 WHERE update > 0

このクエリは、更新する新しいものがある場合に更新列を 1 に切り替えるだけであると想定しています。

さて、あなたの質問が、次の非更新行を 1 にするようにテーブルを更新する方法に関するものである場合、それは別のやかんです。


「更新」(適切な名前だと思います)列をバージョン番号に更新する場合、テーブル構造は次のようになります。

user_id int
version int
downloaded_version int

そのため、ユーザーがバージョンをダウンロードすると、更新されたばかりdownloaded_versionのものに合わせて更新されます。version次回は、 に更新versionversion+1ます。更新を探すクエリは次のようになります。

SELECT *
  FROM idtable
 WHERE user_id = <userid>
   AND version > downloaded_version
于 2012-09-19T20:11:00.413 に答える
0

更新番号を増やしていると仮定して、次のようなことを試してください。

SELECT * FROM idtable
WHERE (
    (id = 1 AND update > 0) OR
    (id = 2 AND update > 0) OR
    (id = 3 AND update > 0)
)

ユーザーが 2 つ以上の ID をダウンロードしている場合は、次を使用して別のテーブルを作成することを検討できます。

  • ユーザーID
  • ID
  • 更新番号

このようにして、複数の OR ステートメントを追加せずにすべての更新を取得できます。

SELECT it.* FROM idtable it, userdownload ud WHERE ud.userID = it.id and ud.id = it.id and ud.update < it.update
于 2012-09-19T20:15:16.437 に答える