Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Antwort
 
Themen-Optionen
Alt 21.08.2006, 21:36   Nach oben    #1
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard Nur Kurse wählen, bei denen das Datum passt

Also, ich hab zwei Tabellen für eine einfache Kursverwaltung:
Code:
+------+--------+
|kurse          |
+------+--------+
|kursID|kursName|
+------+--------+
|1     |Kochkurs|
+------+--------+
|2     |Surfkurs|
+------+--------+
|usw.  |usf.    |
+------+--------+

+---------------------------------------+
|termine                                |
+--------+------+------------+----------+
|terminID|kursID|terminBeginn|terminEnde|
+--------+------+------------+----------+
|1       |2     |timestamp   |timestamp |
+--------+------+------------+----------+
|2       |1     |timestamp   |timestamp |
+--------+------+------------+----------+
|3       |2     |timestamp   |timestamp |
+--------+------+------------+----------+
|4       |1     |timestamp   |timestamp |
+--------+------+------------+----------+
Also eine Tabelle in der die Kurse gespeichert werden, eine zweite mit den dazugehörigen Terminen.

Was ich jetzt machen möchte ist eine Archivfunktion. D.h. es werden die Kurse ausgewählt, deren ältester Termin älter als x ist. Ihc hab shcon einiges dazu rumprobiert, mein "bester" Versuch sah wie folgt aus, seitdem steh ich aufm Schlauch.
Code:
SELECT DISTINCT
    kursID
FROM
    kurse
WHERE
    FIND_IN_SET(kursID,
                (SELECT DISTINCT
                     kursID
                 FROM
                     termine
                 WHERE
                     {-> hier keine ahnung mehr }
                )) = 1
ORDER BY
    kursName
        ASC
Ich möchte also am Ende nur die IDs der alten Kurse haben.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.08.2006, 23:10   Nach oben    #2
Erfahrener Benutzer
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 503
Standard

warum nicht einfach so?
sql Code:
  1. SELECT kurse.kursID
  2. FROM temine
  3. JOIN kurse USING kursID
  4. WHERE termine.terminBeginn < X OR termine.terminEnde < X
  5. ORDER BY kurse.kursName ASC
btw: die erste bedingung kann man auch weglassen; der beginn sollte normalerweise eh vor dem ende liegen
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 21.08.2006, 23:37   Nach oben    #3
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Ja, das war mien erster Versuch. Problem daran ist, dass nur Kurse gewählt werden sollen, von denen _alle_ Termine eine bestimmte Zeit her sind. Bei deinem Code bekommt man für jeden Termin, der die Zeit hinter sich hat, die zugehörige Kurs-ID.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.08.2006, 12:40   Nach oben    #4
Benutzer
 
Registriert seit: 20.08.2005
Beiträge: 91
Standard

Dann geh doch alle Kurse durch und schließ die aus die noch Termine offen haben.
mfg
Homepagespeicher ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 22.08.2006, 17:09   Nach oben    #5
Erfahrener Benutzer
 
Benutzerbild von MrNiceGuy
 
Registriert seit: 14.08.2005
Ort: Nienburg / Weser
Beiträge: 662
Standard

Relativ einfach machbar, allerdings empfehle ich für das Datumsfeld ein DATETIME-Feld, Timestamps sind etwas wenigsagend, wenn man mal manuell an der Tabelle arbeiten muss:

sql Code:
  1. SELECT `k`.`kursID` FROM `kurse` AS `k`
  2.   LEFT OUTER JOIN `termine` AS `t`
  3.     ON `t`.`kursID`=`k`.`kursID`
  4.       AND DATEDIFF(`t`.`terminEnde`, 'YYY-MM-DD HH:MM:SS')<=0
  5.   LEFT OUTER JOIN `termine` AS `t2`
  6.     ON `t2`.`kursID`=`k`.`kursID`
  7.   WHERE COUNT(`t`.`terminID`)=COUNT(`t2`.`terminID`)
  8.   GROUP BY `k`.`kursID` ASC

Du musst dann nur anstelle von 'YYYY-MM-DD HH:MM:SS' das Datum bzw. Datum und Uhrzeit (Uhrzeit kann auch einfach weggelassen werden, wenn nicht benötigt, bsp: 'YYYY-MM-DD') von dem Termin in der Vergangenheit, bis zu dem alle Termine gewesen sein sollen.

Ich hoffe ich konnte dir damit weiterhelfen!?

EDIT: Sorry, mir ist da leider ein kleiner Denkfehler unterlaufen... Ich habe das SQL-Statement nochmal überarbeitet, man muss die Counts der beiden Joins vergleichen, ansonsten kann das so garnicht klappen, wie ich das zuerst dachte. Hoffe es klappt nun so, wie ich es jetzt dargestellt habe, konnte es leider noch nicht testen...
__________________
Paradox ist, wenn jemand für seinen Alkoholkonsum geradestehen soll

Geändert von MrNiceGuy (23.08.2006 um 06:21 Uhr).
MrNiceGuy ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] Zeitformate, Datum und Co Jann Hendrik Tutorials 0 05.12.2006 18:48
Datum in DB und wieder raus Jan PHP-Programmierung 13 22.10.2006 16:15
Aktuelle Kurse Yen Shin Yoshida Plauderecke 7 28.06.2006 23:31
Deutsches Datum in englisches Umwandeln la-finest PHP-Programmierung 16 03.02.2006 12:15
Datum Anzeigen / Speichern doria PHP-Programmierung 27 02.12.2005 12:00


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:22 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44