"在重复更新时按插入到组中进行选择"二合一

时间:2018-03-29 14:10:20

标签: php mysql sql

所以我有这个主要的MySQL表analytika

ID  |  aa_current  |  aa_referrer  | aa_mobile | ......

1      index.html     ----           false       ......
2      frank.html     ----           false       ......
3      lenon.html     ----           true        ......
4      index.html     ----           false       ......
5      lemon.html     ----           false       ......

我尝试做的是每晚都有一个由cron执行的php代码,它会从这个大analytika表中获取数据,按频率对它们进行分组,然后将它们插入到单独的表中对于每一列。 (所以我有像analytika_pages这样的列的其他表,其中只有aa_current数据应该等等。)

这是子表格的期望结果之一analytika_pages

ID  |  aa_current  |  count

1      index.html     2
2      frank.html     1
3      lenon.html     1
5      lemon.html     1

我的主要斗争是将所有操作组合到查询中。我非常初学,所以我把它从多个来源中提出来,我几乎就在那里,但它缺少的是拿COUNT并将其插入aa_current。

INSERT INTO analytika_pages(aa_current)
    SELECT aa_current
    FROM
    (SELECT aa_current, COUNT(aa_current) AS pocet FROM analytika GROUP BY aa_current ORDER BY pocet DESC) as sb
    ON DUPLICATE KEY UPDATE count = count + pocet

重复我的需要:

  • 从主表中获取所有数据
  • 专注于一个特定的专栏
  • 按频率对行进行分组
  • 将它们插入仅为此值制作的单独表格中
  • 单独的表还需要填写
  • 的出现次数(来自查询的COUNT)
  • 需要作为插入工作,如果存在,则更新。

1 个答案:

答案 0 :(得分:1)

你也应该检索一个有效的id ..让DUPLICATE KEY条件也可以工作

public class Item {
    private String itemName;
    private String itemDescription;
    private int priority;

    public Item(String name, String description, int priority) {
        this.itemName = name;
        this.itemDescription = description;
        this.priority = priority;

    }

    public String getItemName() {

        return this.itemName;
    }

    public String getItemDescription() {

        return this.itemDescription;

    }

    public int getPriority() {

        return this.priority;

    }

}

(但你确定两张桌子之间的ID总是连贯的吗?)