phpbar.de logo

Mailinglisten-Archive

[php] Doofer MySQL Timestamp SELECT

[php] Doofer MySQL Timestamp SELECT

Martin Franz martin_(at)_franz63.de
Wed, 10 Jan 2001 23:47:40 +0100


Hoi Tobe,

Nein, darf nicht wahrsein - Du darfst ernsthaft an dem heiligen Grafschen'
Veranstaltungskalender rumpfuschen? ohlálá..
Nungut - warum der hobbyhalbgott hier nen timestamp14 genommen hat is mir n
Rätsel - naja, aber ich hoffe er hat gewusst warum - sekundengenaue
Veranstaltungen son käse ;-) (jaja, immer diese studenten..)
Nein, also ernsthaft -
Im Falle des Oktoberfestes, wäre das Oktoberfest, da es ja 12 Tage dauert -
jetzt mit 12 rows in der datenbank vertreten? weil ja immer von=bis, also
kann man ja wohl nur maximal einen tag mit einem Datensatz beschreiben.
Gut und Dein Problem ist, rauszufinden wie lang das Oktoberfest dauert?
Ja?
KEINE AHNUNG! ;-)
nein, schon Ahnung - aber die ist jetzt vielleicht etwas overkill, aber ich
seh im moment keine andere Lösung.
also nochmal, Problem ist folgende Tabelle:
 +------+----------+----------------+----------------+----------------+
 | id   | vanummer | titel          | datumvon       | vdatumbis      |
 +------+----------+----------------+----------------+----------------+
 |   31 | 09173112 | Veranstaltung1 | 20000930000000 | 20000930000000 |
 |   45 | 09173112 | Veranstaltung1 | 20001001000000 | 20001001000000 |
 |   57 | 09173112 | Veranstaltung1 | 20001002000000 | 20001002000000

output soll sein Länge der Veranstaltung 1 - unter der Bedingung dass es
mehrere Veranstaltung1 gibt.
Tobsn, was schreibstn da für romane drüber - lässt sich doch leicht erklären
;-)

Also ne Möglichkeit wäre die Tabelle zweimal mit unterschiedlichem alias
referenzieren und dann mit sichselbst joinen.  Da kannst du Dann sagen
"WHERE table1.datumvon = subdate(table2.datumvon, INTERVAL 1 DAY). AND
table1.vanummer=table2.vanummer". Sollte gehen.. dann bekommst du Alle
Veranstaltungen die an einem Stück über mehrere Tage stattfinden. (z.b. das
Oktoberfest) mit
noch einiger Raffinesse schafft mans dann auch in dem Fall dass das
Oktoberfest 2 mal im Jahr stattfindet - und man das Problem hat dass eines
davon gerade läuft, und man aber nur dieses Selecten will. uff..

Also ich versuch mal den ganzen Query:

"SELECT a.* FROM veranstaltungstabelle a LEFT JOIN veranstaltungstabelle b
ON a.vanummer=b.vanummer where a.datumvon = subdate(b.datumvon, INTERVAL 1
DAY)";

hmm, das kanns nochnicht sein - jetzt bekommst du zwar den ganzen Block -
aber wenn das Ding zweimal stattfindet wirds wieder ein grosser Block -
nicht so einfach - aber ich denk das war jetzt schonmal ein guter Anfang. Da
grübel ich morgen weiter - muss jetzt noch ne runde assembler proggen -
scheiss informatik-Übungen..

Ha, halt grad dämmert mir die wohl einfachste jedoch etwas unsaubere
Möglichkeit:
"select vanummer from veranstaltungstable where datumvon = curdate()"; //
alle Veranstaltungen von heute, so oder ähnlich selecten..
und am besten alle vanummern in einen String mit Kommas zusammenjoinen.

dann noch ein "Select * where vanummer IN(dieser_string) order by datumvon"
und dann in der fetch_array() - Schleife das Datum der ersten Veranstaltung
merken, die nächste row holen, kucken ob vanummer gleich ist und ob das
datum der gemerkten Veranstaltung + 1 Tag gleich dieser Row ist.
u.s.w
sehr umständlich .. *grübel*
ach ich mach morgen weiter..

martin






php::bar PHP Wiki   -   Listenarchive