0

我有一个跟踪用户点击的数据库。如果有人两次单击同一事物,则可能会在数据库中产生具有相同时间戳的重复条目。

有没有办法修改我的查询以仅返回具有唯一时间戳的结果而不是重复的结果。

$stmt1 = $dbConn1->prepare("
    SELECT count(*)
    FROM asset_lookup
    ");
4

2 回答 2

1

我相信您正在寻找独特的关键字。阅读此线程它应该对您有所帮助。

mysql查询:SELECT DISTINCT column1,GROUP BY column2

于 2012-12-03T20:14:00.970 回答
1

笔记:

  • 因为您在子句中使用了连接,所以product100% 等同于连接。除此之外,是否有必要计算表格中不存在且仅存在于表格中的产品(如果有)的点击次数?INNERproduct.product_type_id = 2WHEREproductasset

  • 因为您在子句中使用了LEFT连接,所以event100% 等同于连接。INNERevent.activation_dateWHERE

  • 加入tracking_product_lookup似乎完全没用。

  • COUNT(*)连接可能会给出错误的结果。COUNT(*)计算中间结果集中的行数,外部连接在某些列中生成带有 Null 的行(例如,根本没有点击的产品仍将显示计数为 1)。

  • 要回答实际问题,如果要计算不同的时间戳,请使用COUNT(DISTINCT column),而不是COUNT(*)

查询将被写为:

SELECT product.id, product.name, 
       count(DISTINCT asset_lookup.timestamp)
FROM asset_lookup
  JOIN product ON asset_lookup.product_id = product.id
  JOIN event ON asset_lookup.event_id = event.id
WHERE asset_lookup.event_id = ?
  AND product.product_type_id = 2
  AND asset_lookup.timestamp > event.activation_date
GROUP by asset_lookup.product_id ;
于 2012-12-03T20:22:46.523 回答