2016-10-05 135 views
1

我有一個存儲用戶登錄信息的表。 表將用戶的登錄信息存儲到特定系統。因此,當用戶登錄到系統時,它保存在我的表和狀態字段設置爲1mysql-忽略mysql表中的重複值

這是我的表結構:

CREATE TABLE IF NOT EXISTS `login_info` (
    `id` int(11) NOT NULL, 
    `staffID` int(11) NOT NULL, 
    `logDate` date NOT NULL, 
    `status` int(11) NOT NULL 
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1; 

事情是,一些用戶記錄複製,我試圖避免它們。我的意思是,一些用戶不止一次登錄系統。因此,在特定的一天中,他們可能會有多條記錄,而在另一天,如果他們根本沒有登錄,他們將不會有任何記錄。

我做了數據的樣本:

INSERT INTO `login_info` (`id`, `staffID`,`logDate`, `status`) VALUES 
(1, 100, '2016-10-01',1), 
(2, 100, '2016-10-01',1), 
(3, 100, '2016-10-01',1), 
(4, 101, '2016-10-01',1), 
(5, 101, '2016-10-01',1), 
(6, 102, '2016-10-01',1), 

(7, 100, '2016-10-02',1), 
(8, 101, '2016-10-02',1), 
(9, 101, '2016-10-02',1), 
(10, 102, '2016-10-02',1), 
(11, 103, '2016-10-02',1), 

(12, 100, '2016-10-03',1), 
(13, 101, '2016-10-03',1), 
(14, 102, '2016-10-03',1), 
(15, 103, '2016-10-03',1), 

(16, 100, '2016-10-04',1), 
(17, 100, '2016-10-04',1), 
(18, 102, '2016-10-04',1), 
(19, 103, '2016-10-04',1); 

你知道,在3次檢查了2016-10-01 ID 100和工作人員ID 103人員沒有登錄的。

我試圖爲每一天提取不同的記錄,這不是我以前認爲的方式。

這裏有一個FIDDLE

我試圖

select staffID from login_info WHERE logDate >= '2016-10-01' AND status=1; 

select logDate from login_info WHERE logDate >= '2016-10-01' AND status=1; 

這不是什麼獲取我所期待的。

這就是我想要實現:

id staffID logDate  status 
3  100  2016-10-01  1 
5  101  2016-10-01  1 
6  102  2016-10-01  1 
7  100  2016-10-02  1 
9  101  2016-10-02  1 
10 102  2016-10-02  1 
11 103  2016-10-02  1 
12 100  2016-10-03  1 
13 101  2016-10-03  1 
14 102  2016-10-03  1 
15 103  2016-10-03  1 
17 100  2016-10-04  1 
18 102  2016-10-04  1 
19 103  2016-10-04  1 
+0

您有條件指定日期應該從10月2日開始 - 爲什麼您會從10月1日起獲取記錄? – Mureinik

+0

考慮到這是一個錯字。現在糾正它。 @Mureinik –

回答

1

會爲你下面的工作?

SELECT * FROM login_info 
WHERE logDate >= '2016-10-02' 
AND status=1 
GROUP BY staffId, logDate 
ORDER BY logDate; 

如果你想包括2016-10-01,您需要更改爲logDate >= '2016-10-02

的重要組成部分,這裏是它給你的每一個用戶的每一天的數據組。排序方式僅限於以您想要的順序返回數據