| | | | |
| |||||||
| Datenbanken SQL und Co |
|
| | LinkBack | Themen-Optionen | Thema bewerten |
| | |
| Benutzer Registriert seit: 14.02.2006
Beiträge: 49
![]() | Hallo. In Ergänzung zu diesem Beitrag: http://www.phpfriend.de/forum/viewtopic.php?t=57012 In meiner Termintabelle werden Serientermine folgendermaßen gespeichert: Termin-ID: 1 anf_am: 15.05.2007 end_am: 15.06.2007 intervall: 1 dauer: 7 Soll heißen, ein Serientermin findet zwischen den beiden Datumswerten statt, wobei das Intervall 1 für "wöchentlich" steht und die dauer 7 für "alle 7 Tage" (was ja eigentlich das gleiche ist, aber mit der Spalte dauer lassen sich noch andere Zeitspannen bestimmen). Dieser Termin findet also jede Woche einmal statt. Was klappt (und was ich am Ende zeige) ist folgendes: Ein Benutzer gibt ein Datum ein und der SQL-Code errechnet auf Basis der Daten oben, ob das gesuchte Datum in den Zeitraum passt (und ob das gesuchte Datum auch an einem Termin stattfindet, der nicht direkt in der Termintabelle steht, sondern der sich nur nur das Intervall errechnen lassen würde). Was ich jetzt aber suche ist das Gegenteil: Ich habe die Termin-ID (1) und will mir in SQL alle Datumswerte ausgeben, die in dem Intervall liegen. Also in dem Beispiel sollte die Ausgabe sein (jeweils um 7 erhöht und innerhalb von Anfangs- und Enddatum): 15.05.2007, 22.05.2007, 29.05.2007 ... Wie kriege ich es jetzt hin, der Select-Anweisung zu sagen, sie solle diese Termine selbst berechnen, solange Start- und Enddatum nicht über bzw. unterschritten sind. Ich bräuchte innerhalb der Select-Anweisung eine Schleife oder so? Oder geht das nur über PHP? Hier die SQL-Funktion zum Abfragen nach Terminen (da ist sicherlich viel Mist drin, aber das Entscheidende ist wohl der WHERE-Teil). Ich vermute mal, dass die Antwort da schon halb drin steht, aber ich sehe gerade den Wald vor lauter Bäumen nicht. Code: SET @dat = "2006-10-02";
$suchdatum2 = '2006-11-05';
$sql_term = "SELECT *,
(PERIOD_ADD(EXTRACT(YEAR_MONTH FROM '$suchdatum2'),-0)*100)+1 AS ANF,
DATE_FORMAT('$suchdatum2' ,'%Y-%m-01') AS ANF2,
(PERIOD_ADD(EXTRACT(YEAR_MONTH FROM '$suchdatum2'),-0)*100)+31 AS End,
SUBDATE( ADDDATE( '$suchdatum2', INTERVAL 1 MONTH), INTERVAL DAYOFMONTH( '$suchdatum2' ) DAY) AS END2,
ELT( WEEKDAY('$suchdatum2')+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag') As Tag1,
DATE_FORMAT( '$suchdatum2', CONCAT( ELT( WEEKDAY('$suchdatum2')+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag'),', %d. ', ELT( MONTH('$suchdatum2'), 'Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'),' %Y')) As Datumlang,
DAYOFWEEK('$suchdatum2')-1 As WTagSuche,
DAYOFWEEK(anf_am)-1 As WTag,
ELT( WEEKDAY(anf_am)+1, 'Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag') As Tag1_Ist,
WEEK('$suchdatum2',1) As Wo
FROM
t_termine
WHERE
(intervall = 0 AND anf_am = '$suchdatum2')
OR (
(
('$suchdatum2' BETWEEN anf_am AND end_am) AND
(intervall = 1 AND
DATEDIFF('$suchdatum2', anf_am) % dauer = 0) OR
(intervall = 2 AND
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM '$suchdatum2'), EXTRACT(YEAR_MONTH FROM anf_am)) % dauer = 0 AND
DAYOFMONTH(anf_am) = DAYOFMONTH('$suchdatum2')) OR
(intervall = 3 AND
PERIOD_DIFF(EXTRACT(YEAR_MONTH FROM '$suchdatum2'), EXTRACT(YEAR_MONTH FROM anf_am)) % dauer = 0
)
))
|
| | |
| | |
| PHP Code Flüsterer Registriert seit: 21.08.2005 Beiträge: 4682 PHP-Kenntnisse: Fortgeschritten | |
| | |
| Moderator und Wett-König | Hallo webazubi, auch wenn du Zergling beweisen wolltest, dass alles in SQL zu lösen ist, solltest du spätestens jetzt dazu übergehen und das in mehreren Schritten und in kleineren SQL-Blöcken realisieren - mehr kann ich dir dazu nicht sagen.
__________________ Viele Grüße, Dr.E. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1. Think about software design before you start to write code! 2. Discuss and review it together with experts! 3. Choose good tools (-> Adventure PHP Framework (APF))! 4. Write clean and reusable software only! ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| | |
|
| Themen-Optionen | |
| Thema bewerten | |
|
|
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Erledigt] Kein Ergebnis bei SELECT (MySQL 4.1.9) | dr.e. | Datenbanken | 4 | 15.06.2008 19:54 |
| [Erledigt] Mysql Insert Select + Concat | Hu5eL | Datenbanken | 14 | 10.06.2008 10:39 |
| SELECT AS geht bei AVG net | cyberholic | Datenbanken | 0 | 04.05.2006 09:43 |
| [JavaScript] Event Handler in form select - Syntax? | winfo_cologne | HTML, Usability und Barrierefreiheit | 5 | 29.03.2006 16:47 |
| Schleife nach Tastendruck beenden | schnurzli | PHP Tipps 2006 | 7 | 24.03.2006 18:56 |
| Warum wird die erste Schleife nur einmal durchlaufen ? | PHP Tipps 2006 | 12 | 03.03.2006 20:04 | |
| [Erledigt] While schleife in while schleife = nur ein datensatz?! | PHP Tipps 2005-2 | 9 | 28.10.2005 12:48 | |
| Probleme mit Inner Select | Datenbanken | 0 | 19.10.2005 15:22 | |
| while schleife beenden | PHP Tipps 2005 | 3 | 29.03.2005 20:35 | |
| IF ELSEIF ELSEIF ELSE mit While Schleife | PHP Tipps 2005 | 9 | 04.03.2005 23:27 | |
| [Erledigt] 2 mal select 1 form | PHP-Fortgeschrittene | 1 | 01.09.2004 20:13 | |
| selektierter wert in select box anzeigen | PHP Tipps 2004 | 6 | 30.08.2004 13:49 | |
| Schleife | PHP Tipps 2004 | 6 | 06.08.2004 12:08 | |
| Select abfrage in Schleife | PHP Tipps 2004 | 2 | 20.07.2004 15:37 | |
| Prob mit While schleife | JEGO | PHP Tipps 2004 | 2 | 04.06.2004 12:01 |
| Besucher kamen über folgende Suchanfragen bei Google auf diese Seite |
| select schleife, sql select schleife, select for schleife, schleife in select, sql for schleife select, select mit schleife, select in schleife, sql select for schleife, sql schleife select, for schleife in select, select mit for schleife, for schleife select, schleife select, php select schleife, php sql serientermin, sql schleife über select, sql schleife in select, select als schleife, sql datum schleife, sql schleife innerhalb select |

Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.