我有一个跟踪用户点击的数据库。如果有人两次单击同一事物,则可能会在数据库中产生具有相同时间戳的重复条目。
有没有办法修改我的查询以仅返回具有唯一时间戳的结果而不是重复的结果。
$stmt1 = $dbConn1->prepare("
SELECT count(*)
FROM asset_lookup
");
我有一个跟踪用户点击的数据库。如果有人两次单击同一事物,则可能会在数据库中产生具有相同时间戳的重复条目。
有没有办法修改我的查询以仅返回具有唯一时间戳的结果而不是重复的结果。
$stmt1 = $dbConn1->prepare("
SELECT count(*)
FROM asset_lookup
");
我相信您正在寻找独特的关键字。阅读此线程它应该对您有所帮助。
笔记:
因为您在子句中使用了连接,所以product
100% 等同于连接。除此之外,是否有必要计算表格中不存在且仅存在于表格中的产品(如果有)的点击次数?INNER
product.product_type_id = 2
WHERE
product
asset
因为您在子句中使用了LEFT
连接,所以event
100% 等同于连接。INNER
event.activation_date
WHERE
加入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 ;