我有一个数据库跟踪用户点击。如果有人两次点击同一个事物,它可能会在数据库中产生具有相同时间戳的重复条目。MySQL查询选择唯一时间戳
有没有办法将我的查询修改为只返回带有唯一时间戳的结果,而不是重复项。
$stmt1 = $dbConn1->prepare("
SELECT count(*)
FROM asset_lookup
");
我有一个数据库跟踪用户点击。如果有人两次点击同一个事物,它可能会在数据库中产生具有相同时间戳的重复条目。MySQL查询选择唯一时间戳
有没有办法将我的查询修改为只返回带有唯一时间戳的结果,而不是重复项。
$stmt1 = $dbConn1->prepare("
SELECT count(*)
FROM asset_lookup
");
注:
的加盟product
相当于一个INNER
100%加入,因为你的WHERE
子句中使用product.product_type_id = 2
。除此之外,对于product
表中不存在且仅在asset
表(如果有)的表中不存在的产品,点数是否有点数?
的LEFT
加盟event
相当于100%的INNER
加入,因为你的WHERE
子句中使用event.activation_date
。
加入到tracking_product_lookup
似乎完全没用。
COUNT(*)
可能会给外部连接带来错误的结果。 COUNT(*)
对中间结果集中的行进行计数,并且外部连接生成某些列中含有空值的行(例如,根本没有点击的产品仍将显示计数为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 ;
当有人点击创建什么项目吗? 'timestamp'和'product_id'? – Horen
@霍恩,是的。 asset_lookup是使用时间戳值创建的。那是我追求的桌子。 – Jako
所以当用户点击两次时,就是这样的:'timestamp = 1','product_id = 1'和第二个入口'timestamp = 2','product_id = 1'?你想只有一排回来?我理解正确吗? – Horen