代码之家  ›  专栏  ›  技术社区  ›  halocursed

帮助处理另一个MySQL查询

  •  -3
  • halocursed  · 技术社区  · 16 年前

    我想在表中选择新添加的不同产品ID的计数

    ID    product_id
     1      abc
     2      abc
     3      cat
     4      dog
     5      dog
     6      man
     7      man
     8      bat
     9      bat
    10      abc
    11      cat
    12      dog
    13      dog
    

    我想要一个从上表得到类似结果的查询-
    狗2
    猫1
    美国广播公司- 1
    蝙蝠2
    人2

    *提前谢谢
    *编辑
    我有一个表来存储产品的图像,我不断地在此表中添加产品的新图像,我想选择该特定产品的新添加图像的计数(忽略表中前面添加的图像集)。我希望我已经说清楚了

    *编辑我找到了问题的答案。

    SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
    WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                                 FROM xbrygame_scrnsmkv 
                                 WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                                 FROM xbrygame_scrnsmkv 
                                                                 ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
       GROUP BY xbrygame_scrnsmkv.product_id
    
    3 回复  |  直到 16 年前
        1
  •  3
  •   Zed    16 年前

    您可以重新设计您的桌子,使其具有计数器:

    ID    product_id  consecutive
     8      bat         1
     9      bat         2
    10      abc         1
    11      cat         1
    12      dog         1
    13      dog         2
    

    当插入到表中时,首先检查最后一个条目及其连续计数器。如果要插入相同的元素,请增加计数器,否则插入1。比如:

    INSERT INTO Table (product_id, consecutive) VALUES
    ('newProd', CASE (SELECT product_id FROM Table WHERE ID = MAX(ID))
                  WHEN 'newProd' THEN
                               (SELECT consecutive FROM Table WHERE ID = MAX(ID)) + 1
                  ELSE 1
                END);
    

    然后您可以将您的选择设置为:

    SELECT product_id, consecutive
    FROM Table
    WHERE ID IN
      (SELECT MAX(ID)
       FROM Table
       GROUP BY product_id)
    

    最初的答案是:

    SELECT Filename, COUNT(Filename) as Count
    FROM Table
    GROUP BY Filename
    
        2
  •  1
  •   johnc    16 年前

    如果您只想要“新添加的”记录,您必须以某种方式指示新添加的记录是什么。您的DBMS可能默认支持在所有记录上进行约会(我有一个暗示,Ingres可能会这样做,但我可能在想象——我已经用了一段时间了),但您可能需要自己添加一些内容到行中。

    您可以添加一个要筛选的日期时间字段,然后您可以像Zed所做的那样:

    SELECT Filename, COUNT(Filename) as Count
    FROM Table
    WHERE DateAdded > (FilterDate)
    GROUP BY Filename
    

    ( 编辑 其中,filterdate是一个日期时间,在该日期时间之后,您认为一条记录是新的,例如,您可以将其设置为now减去60分钟-语法将根据DBMS而变化)

    或者,您可以添加一个“new”标志位列,并为每个新记录将其设置为true,在读取后或某个任意间隔后将其关闭。

        3
  •  0
  •   halocursed    16 年前
    SELECT COUNT(xbrygame_scrnsmkv.id) FROM xbrygame_scrnsmkv 
    WHERE xbrygame_scrnsmkv.id >(SELECT  MAX(xbrygame_scrnsmkv.id) 
                                 FROM xbrygame_scrnsmkv 
                                 WHERE xbrygame_scrnsmkv.product_id= (SELECT  DISTINCT xbrygame_scrnsmkv.product_id 
                                                                 FROM xbrygame_scrnsmkv 
                                                                 ORDER BY xbrygame_scrnsmkv.id DESC LIMIT 5,1)) 
       GROUP BY xbrygame_scrnsmkv.product_id