2013-10-24 57 views
1
id   | user_id  |  date_tracked 
--------------------------------------------- 
1001   | 1    | 10-10-2013 
1002   | 2    | 10-10-2013 
1003   | 3    | 10-10-2013 
1004   | 1    | 10-11-2013 
1005   | 2    | 10-12-2013 

我有一個類似於此的表,它跟蹤用戶和日期。我需要查找在選定日期發生了多少次用戶首次輸入。這個表格將保存大量的數據,這就是爲什麼我想依賴查詢來處理這個而不是一堆PHP循環的原因。計數/檢查mysql表中條目的第一個實例

即在2013年10月11日,用戶1訪問,但不是他們第一次,所以對二零一三年十月十日返回0 ,用戶1和2訪問爲他們的第一次,所以返回2.

很明顯,使用簡單的查詢可以計算指定日期的條目數,但是如果user_id先前不存在,那麼使用什麼方法才能計算。

該表按日期排序,這意味着更新的日期不應該比較早的日期具有更小的id。

任何想法??謝謝!

回答

3

求全部 「第一時間」 -date,由用戶:

SELECT user_id, MIN(date_tracked) AS first_date 
FROM table 
GROUP BY user_id 

計數 「第一時間」,對於每個日期:

SELECT t.first_date, COUNT(*) AS nb 
FROM (SELECT user_id, MIN(date_tracked) AS first_date 
FROM table 
GROUP BY user_id) t 
GROUP BY t.first_date 
0

SELECT USER_ID,MIN(date_tracked) FROM TABLE_NAME GROUP BY user_id

0

作爲一個統計,如果用戶在第一天訪問多次,您可以通過兩種方式進行:

SELECT COUNT(distinct user_id) 
FROM user t1 
WHERE t1.date_tracked = '2013-10-12' 
AND NOT EXISTS (
    SELECT 1 
    FROM user t2 
    WHERE t2.user_id = t1.user_id 
     AND t2.date_tracked < t1.date_tracked 
    ); 

SELECT COUNT(user_id) 
FROM user t1 
WHERE t1.date_tracked ='2013-10-12' 
AND NOT EXISTS (
SELECT 1 
    FROM user t2 
    WHERE t2.user_id = t1.user_id 
    AND t2.id < t1.id 
); 

我想我更喜歡第二個,因爲它比ID更加清潔,而且不需要做清晰的事情。

sqlfiddle demo

+0

我喜歡這是格式化的方式,但如果用戶在同一天登錄多次,這不會阻止。 – Ryan

+0

如果他們在當天登錄兩次或更多,你希望他們計爲1? –

+0

他們是否登錄不止一次,只需要檢查他們第一次登錄整個數據庫。這是檢查他們訪問的第一個日期,如果他們一天訪問超過一次,則不會返回正確的ID。 – Ryan

0

通過你的標籤我假設你想在PHP你的答案爲好。 只有一個查詢:不應該日期10-10-2013返回3? 反正你可以試試這個:

<?php 

$數據庫連接= @mysqli_connect($主機,$用戶,$通行證)或死亡();

@mysqli_select_db($dbConnect, $dbname) or die(); 
$query = "SELECT id FROM tablename WHERE date_tracked = '$searchDate' AND (SELECT COUNT(id) FROM tablename WHERE date_tracked < '$searchDate')=0"; 
$queryResult = @mysqli_query($dbConnect, $query) or die(); 
$rowCount = mysqli_num_rows($queryResult); 
echo $rowCount . "<br/>"; 

mysqli_close($dbConnect); 

?>

+0

是的,10-10-2013應該是3.謝謝! – Ryan

+0

然後上面的代碼應該可以工作 – jcrulez

1

響應於菲利普,

也許這會更適合?

SELECT COUNT(*) 
FROM table t1 
WHERE t1.date ='2013-8-27' 
AND NOT EXISTS (
SELECT 1 
FROM table t2 
WHERE t2.user_id = t1.user_id 
    AND t2.id < t1.id 
); 
+0

是的。我想我也更喜歡這個。我用另一個例子更新了我的答案。 –

相關問題