2016-08-20 1 views
3

Ich habe hier eine Tabelle für den Zeitplan von 2 Mitarbeitern. Wie werde ich die Zeilen eines bestimmten Mitarbeiters abrufen, die von Montag bis Sonntag einen kompletten Zeitplan hat und startet von 2016.08.15 bis 2016-08-21SQL Fetch Zeilen, wenn es alle Kriterien erfüllt

| id | emp_id | date | day | 
|----|--------|------------|-----| 
| 1 | emp1 | 2016-08-17 | Wed | 
| 2 | emp1 | 2016-08-18 | Thu | 
| 3 | emp1 | 2016-08-19 | Fri | 
| 4 | emp1 | 2016-08-20 | Sat | 
| 5 | emp1 | 2016-08-21 | Sun | 
| 6 | emp2 | 2016-08-15 | Mon | 
| 7 | emp2 | 2016-08-16 | Tue | 
| 8 | emp2 | 2016-08-17 | Wed | 
| 9 | emp2 | 2016-08-18 | Thu | 
| 10 | emp2 | 2016-08-19 | Fri | 
| 11 | emp2 | 2016-08-20 | Sat | 
| 12 | emp2 | 2016-08-21 | Sun | 

Also im Grunde es sollte nur die Einträge von emp abrufen 2. Dies ist, wie der Ausgang

| 6 | emp2 | 2016-08-15 | Mon | 
| 7 | emp2 | 2016-08-16 | Tue | 
| 8 | emp2 | 2016-08-17 | Wed | 
| 9 | emp2 | 2016-08-18 | Thu | 
| 10 | emp2 | 2016-08-19 | Fri | 
| 11 | emp2 | 2016-08-20 | Sat | 
| 12 | emp2 | 2016-08-21 | Sun | 

sein sollte Aber wenn ang1 Montag und dienstag hat sched es auch abgerufen werden soll.

AKTUALISIERT

Eigentlich mit ich die Anwendung dieses in codeigniter und Hilfe der Antworten, die ich habe es geschafft, es in eine codeigniter aktiven Datensatz Syntax zu übersetzen, und das ist, wie mein Code wie folgt aussieht:

Übrigens habe ich auch eine andere Tabelle, die mit der Zeitplan-Tabelle verbunden werden muss Aber das scheint inkorrekt zu sein, weil ich einen Fehler bekommen habe. Wie soll ich das lösen?

+0

Bitte angeben, ob Sie alle Einträge von EMP2 wollen oder nur jenen Bereich innerhalb des angegebenen Datums. –

+0

Ich brauche nur die Einträge von emp2 innerhalb des angegebenen Datumsbereichs – Pretorian

+1

Es war eine ziemlich gute Frage vor dem Update. Also rate ich Ihnen: - Rollback Ihr Update - Upvote beide Antworten - Akzeptieren Sie Mureiniqs Antwort - Lernen Sie, Ihren Code zu debuggen - Löschen Sie die ';' in Ihrem ON-Klausel –

Antwort

2

Ein vollständiger Zeitplan von 2016-08-15 bis 2016-08-21 bedeutet, dass sieben Tage geplant sind. So konnte man nur die Anzahl der Tage in diesem Zeitraum geplant überprüfen und sicherstellen, dass Sie sieben (verschiedene) one:

SELECT * 
FROM schedule 
WHERE `date` >= '2016-08-15' AND 
     `date` <= '2016-08-21' AND 
     emp_id IN (SELECT emp_id 
        FROM  schedule 
        WHERE `date` >= '2016-08-15' AND `date` <= '2016-08-21' 
        GROUP BY emp_id 
        HAVING COUNT(DISTINCT `date) = 7) 
+0

@Murenik Vielen Dank :) Ich werde es versuchen – Pretorian

1

Ist dies tun, was Sie wollen?

select emp_id 
from t 
where date >= '2016-08-15' and date <= '2016-08-21' 
group by emp_id 
having count(*) = 7; 

Um die detaillierten Aufzeichnungen zu erhalten, können Sie ein join, in oder exists verwenden:

select t.* 
from t 
where t.emp_id in (select emp_id 
        from t 
        where date >= '2016-08-15' and date <= '2016-08-21' 
        group by emp_id 
        having count(*) = 7 
       ); 
Verwandte Themen