4

私は次のようなmysqlテーブルを持っています:

id, visitorid, pageid

訪問者がWebサイトにアクセスすると、訪問者IDとページIDが行として保存されます。

ウェブサイトに正確にX回アクセスした訪問者の数を抽出しようとしています。(チャートの場合)。つまり、1ページだけを訪問する人の数、2ページを訪問する人の数...

これまでのところ:

SELECT COUNT(visid),visid FROM vislog GROUP BY visid ORDER BY COUNT(visid) DESC

しかし、カウントを数える次の部分をどのように行うかはわかりません。

MySQLクエリとして実行することは可能ですか?

4

5 に答える 5

14

クエリを別のクエリ内にラップできます。

SELECT
    cnt      AS page_visits
  , COUNT(*) AS number_of_visitors
FROM
    ( SELECT 
          COUNT(*) AS cnt                --- use: COUNT(DISTINCT page_id)
                                         --- for a different count
      FROM vislog 
      GROUP BY visid
   ) AS grp
GROUP BY cnt 
ORDER BY number_of_visitors ;

または(これは数値をチャートに渡すのにもっと理にかなっていると思います)、ORDER BY以下を入れるのと同じであるを削除します:

ORDER BY cnt ;
于 2012-10-07T10:32:05.427 に答える
10

これを行う 1 つの方法は、このクエリを別のクエリにラップすることです。

SELECT COUNT(visid) FROM (
    SELECT COUNT(visid) AS cvisid, visid 
      FROM vislog 
  GROUP BY visid 
  HAVING cvisid = 2) AS c

しかし、訪問のヒストグラムを取得する必要があると思います:これはPHPで行うことができます(クエリが質問と同じであると仮定します):

$results = array();
// query preparation skipped, as it's obviously done by the OP himself
while ($row = $sth->fetch()) {
  $count = $row['cvisid'];
  if (isset($results[$count])) {
    $results[$count]++;
  }
  else {
    $results[$count] = 1;
  }
}

またはMySQL自体で:

SELECT cvisid, 
       COUNT(cvisid) AS cnt 
  FROM (
    SELECT visid,
           COUNT(visid) AS cvisid 
      FROM vislog 
  GROUP BY visid ) AS c
GROUP BY cvisid
于 2012-10-07T10:20:41.170 に答える
0

次のクエリを使用してみてください

SELECT COUNT(a.page_visits) AS no_of_visitors, a.page_visits AS page_count
FROM(
SELECT COUNT(DISTINCT pageid) AS page_visits
FROM vislog
GROUP BY visid) AS a
GROUP BY a.page_visits;

それが役に立てば幸い...

于 2012-10-07T10:26:02.750 に答える
0

Raina77ow (2 回目の返信) は、3 番目のコード ブロックでクリーンなソリューションを返しました。

    SELECT cvisid, 
           COUNT(cvisid) AS cnt 
      FROM (
        SELECT visid,
               COUNT(visid) AS cvisid 
          FROM vislog 
      GROUP BY visid ) AS c
    GROUP BY cvisid

ありがとうございました

于 2015-01-11T14:04:19.997 に答える
-11

私はこのようにそれを解決することができました:

SELECT cnt, COUNT(cnt) FROM (
    SELECT COUNT(visid) as cnt FROM vislog GROUP BY visid
) x GROUP BY cnt ORDER BY cnt ASC

ちょっとxが大事。

于 2012-10-07T10:44:10.997 に答える