0

我有一张包含

  • ID
  • 更新号

用户有一个他已经下载的 id 列表及其更新号。我只想给用户每次下载所需的 id(这些是新的 id - 他还没有下载或得到更新的 id)。我想提出一个查询,这给我带来了这个。假设用户下载了 3 个 ID。

  • 第一:ID = 1,更新 = 0;
  • 第二:ID = 2,更新 = 0;
  • 第三: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

Assuming that you're incrementing update numbers, try something like this:

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

If your users have more than a couple IDs downloaded, you can consider creating another table with:

  • userID
  • ID
  • Update number

This way you could get all updates without adding multiple OR statements:

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 回答
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 回答