0

私は自分の Web サイトへのページ訪問のデータベースを持っています。各訪問には一意の ID がありますが、訪問者が訪問中に複数のページを表示した場合、各ページ ビューは訪問 ID として共有されます。

以下のテーブル構造、

  `id` int(10) NOT NULL AUTO_INCREMENT,
  `client_id` int(11) NOT NULL,
  `url` text NOT NULL,
  `time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `timedate` datetime NOT NULL,
  `visit_id` varchar(100) NOT NULL,
  `url1` varchar(255) NOT NULL,
  `page_time` time NOT NULL,
  `type` varchar(50) NOT NULL,

以下は私のページのスクリーンショットへのリンクです。現時点では、すべての訪問が単一のボックスにリストされていることがわかります。私がしたいのは、結果をブロックにまとめて、同じ visit_id を共有することです。

http://www.lst-technologies.co.uk/pageviews.html

次のコードを試しました:

 SELECT * FROM $tableName WHERE client_id='$client_id' AND visit_id ='$id' GROUP BY visit_id LIMIT $start, $limit

ただし、これは単に結果をグループ化するだけで、1 つのエントリを表示するだけです。

電流表示用コード

 SELECT * FROM $tableName WHERE client_id='$client_id' AND visit_id ='$id' LIMIT $start, $limit
4

3 に答える 3

1

あなたは何のためにあるのかについて基本的な誤解を持っていGROUP BYます。COUNT()関連する行をまとめるためではなく、 、SUM()、などの集計関数を使用するときに、関連する行を結果の 1 つの行に結合するためのものMAX()です。

結果で関連する行をまとめて取得するには、 を使用しORDER BYて、関心のある列を順序付けリストの最初の列にします。

ORDER BY visit_id, timedate

訪問 ID を出力に 1 回だけ表示したい場合は、結果を処理する PHP ループに次のような内容を含める必要があります。

if ($row['visit_id'] != $last_visit_id) {
  $last_visit_id = $row['visit_id'];
  echo "Visit ID: $last_visit_id\n";
}
于 2013-06-25T00:32:57.527 に答える