我有一个包含
的表格用户拥有他已下载的ID列表及其更新编号。 我想给用户每次只下载必要的ID(这是新的ID - 他还没有下载或者有更新的ID)。 我想提出一个带给我这个问题的查询。 比方说,用户已经下载了3个ID。
所以现在我在服务器上想要更新一个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,因为我从服务器更新了它。)
请帮助我!!
答案 0 :(得分: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
答案 1 :(得分:0)
获取ID的查询只是
SELECT *
FROM idtable
WHERE update > 0
该查询假定您只需在有新内容更新时将更新列切换为1。
现在,如果您的问题是如何更新表格,以便将下一个非更新行转为1,那么它就是一个不同的鱼。
如果您正在更新版本号的“更新”(我确定它是一个正确的名称)列,那么您的表结构应该是这样的:
user_id int
version int
downloaded_version int
因此,当用户下载版本时,您需要更新downloaded_version
以匹配刚刚更新的version
。下次,您将version
更新为version+1
。
查找更新的查询变为:
SELECT *
FROM idtable
WHERE user_id = <userid>
AND version > downloaded_version
答案 2 :(得分:0)
假设您正在递增更新号码,请尝试以下操作:
SELECT * FROM idtable
WHERE (
(id = 1 AND update > 0) OR
(id = 2 AND update > 0) OR
(id = 3 AND update > 0)
)
如果您的用户下载了多个ID,您可以考虑使用以下内容创建另一个表:
这样您就可以在不添加多个OR语句的情况下获得所有更新:
SELECT it.* FROM idtable it, userdownload ud WHERE ud.userID = it.id and ud.id = it.id and ud.update < it.update