我有一個數據庫跟蹤用戶點擊。如果有人兩次點擊同一個事物,它可能會在數據庫中產生具有相同時間戳的重複條目。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