检查两列SQL多次

时间:2012-09-19 20:04:36

标签: php mysql sql

我有一个包含

的表格
  • 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,因为我从服务器更新了它。)

请帮助我!!

3 个答案:

答案 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,您可以考虑使用以下内容创建另一个表:

  • 用户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