0

これが可能かどうかは完全にはわかりませんが、可能だと思います。

私はいくつかの非常に基本的な統計を収集しようとしているので、次のように継続的に情報を保存する「トラッカー」テーブルがあります。

ID、IP、itemid

アイテムが表示されるたびに、訪問者の IP アドレスとアイテム ID が記録されます。

日常的に、このデータを要約して別のテーブルに挿入したいと思います。

ID、itemid、ビュー

ここで、「views」要素を一意にしたいので、重複する IP アドレスを無視します (1 回だけカウントします)。

それらすべてを単純にループしてそのように実行できることはわかっていますが、単一のクエリだけでプロセス全体を実行することは可能ですか?

私はMySQLを使用しています

4

3 に答える 3

1

これを試して、

insert into newtable(itemid,views) 
select itemid,count(*) 
from (
select itemid 
from tracker 
group by itemid,ip
) 
as a 
group by a.itemid.
于 2013-07-22T13:05:20.700 に答える
1

他の RDBMS では、次の方法で可能です。

    insert into othertable (field_views, field_itemid)
    select count(distinct t.views), t.itemid from tracker
    group by t.itemid

http://dev.mysql.com/doc/refman/5.0/en/insert-select.htmlも参照してください。

この解決策は、othertable.id のプレゼンスの自動インクリメントを意味することに注意してください。

于 2013-07-22T13:08:17.390 に答える
1

trackerテーブルを でグループ化するitemidと、個別の IP アドレスの数が、必要なビューの数になります。

INSERT INTO newtable (itemid, views)
SELECT itemid, COUNT(DISTINCT IP)
FROM tracker
GROUP BY itemid;
于 2013-07-22T13:14:46.887 に答える