2016-10-05 3 views
1

Ich habe eine Tabelle, die Benutzer-Login-Informationen speichert. Tabelle speichert die Anmeldeinformationen des Benutzers für ein bestimmtes System. Also, wenn ein Benutzer-Login auf ein System, das in meiner Tabelle gespeichert ist und das Statusfeld wird als 1.mysql- ignorieren doppelte Werte von einer MySQL-Tabelle

Dies ist meine Tabellenstruktur:

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; 

Das Ding ist, sind einige der Benutzerdatensätzen repliziert und ich versuche, sie zu vermeiden. Ich meine, einige Benutzer melden sich mehr als einmal am System an. Für einen bestimmten Tag haben sie vielleicht mehr als eine Aufzeichnung und für einen anderen Tag werden sie keine haben, wenn sie sich überhaupt nicht einloggen.

ich eine Probe der Daten vorgenommen:

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); 

Sie wissen, Mitarbeiter mit id 100 in 3-mal auf 2016-10-01 und Mitarbeiter mit der ID geprüft 103 überhaupt nicht anmelden.

Ich versuche für jeden Tag verschiedene Datensätze zu holen, die nicht so kommen, wie ich dachte.

Hier ist ein FIDDLE

I

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

UND

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

Es ist nicht zu holen, was ich suche.

Dies ist, was ich versuche zu erreichen: Sie

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

Sie haben eine Bedingung mit Angabe des Datums ab dem 2. Oktober - warum erhalten Sie Aufzeichnungen vom 1. Oktober? – Mureinik

+0

Betrachten Sie das als Tippfehler. Korrigiere es jetzt. @Mureinik –

Antwort

1

Würde die folgende Arbeit?

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

Wenn Sie 2016-10-01 aufnehmen möchten, müssen Sie logDate >= '2016-10-02

Der wichtige Teil hier ändern, die Gruppe von denen geben Sie die Daten für jeden Benutzer für jeden Tag. Order by ist nur da, um die Daten in der von Ihnen gewünschten Reihenfolge zurückzugeben

Verwandte Themen