Autor |
Nachricht |
Topper23
Threadersteller
Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht:
|
Verfasst Di 30.03.2010 13:09
Titel SQL UNION Problem |
|
|
Hallo zusammen,
ich habe ein blödes Problem und da ich ja Mediengestalter und kein Programmierer bin hoffe ich, dass ihr mir helfen könnt.
Und zwar habe ich eine Datenbank mit vielen Ereignissen, die alle ein startdatum haben. Wenn ein Ereignis vorbei ist, soll es natürlich auch nicht mehr erscheinen. Soweit so einfach. Aber der letzte Eintrag aus der Vergangenheit soll immer zu sehen sein. Also der aktuellste Vergangene Termin und alle in der Zukunft liegenden Ereignisse sollen gezeit werden.
Mein Problem kommt dann, wenn ich den SELECT mache. Hier mein (noch nicht richtig funktionierender) Code:
Code: | SELECT * FROM tabelle WHERE startdatum < UNIX_TIMESTAMP(NOW())
UNION
SELECT * FROM tabelle WHERE startdatum > UNIX_TIMESTAMP(NOW()) ORDER BY startdatum ASC |
Auch hier soweit alles gut, bloß werden mir ja ALLE Einträge gezeigt.
Wenn ich also beim ersten Select ein LIMIT von 1 setze, wird mir nur der eine in der Vergangenheitliegende Eintrag angezeit (und vom 2. Select nichts).
Ich brauche eure Hilfe. Eine Lösung mit 2 Arrays, die ich in PHP zu einem Verbinden kann hab ich auch nicht geschafft - ich bin so noob.
|
|
|
|
|
pixelpapst303
Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht:
|
Verfasst Di 30.03.2010 13:33
Titel
|
|
|
mach zwei querys draus...
|
|
|
|
|
Anzeige
|
|
|
Topper23
Threadersteller
Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht:
|
Verfasst Di 30.03.2010 14:04
Titel Re: SQL UNION Problem |
|
|
öööhm....
Topper23 hat geschrieben: | Eine Lösung mit 2 Arrays, die ich in PHP zu einem Verbinden kann hab ich auch nicht geschafft - ich bin so noob. |
wie denn?
|
|
|
|
|
Skyw4lker
Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht:
|
Verfasst Di 30.03.2010 14:18
Titel
|
|
|
warum muss es denn unbedingt in ein Array? Lauf doch zuerst über das eine Array von select 1 und gibs aus und dann gibste noch die eine Zeile von query 2 aus.
|
|
|
|
|
Topper23
Threadersteller
Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht:
|
Verfasst Di 30.03.2010 15:01
Titel
|
|
|
ich muss bei der ausgabe auf mehrere zeilen zugreifen.
also z.B.
date("Y", mysql_result($db_ergebnis,$i,'startdatum'))
und
date("Y" ,mysql_result($db_ergebnis,$i+1,'startdatum'))
finde es im laufe der ganzen funktion auch blöd 2 variablen dafür zu nehmen... geht das select denn nicht?
|
|
|
|
|
leinich
Dabei seit: 23.09.2008
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Di 30.03.2010 16:31
Titel
|
|
|
So müsste es funktionieren...
(nicht probiert, habe grad keine MYSQL Datenbank zur Hand)
Code: |
(SELECT * FROM tabelle WHERE startdatum < UNIX_TIMESTAMP(NOW()))
LIMIT 1
UNION
(SELECT * FROM tabelle WHERE startdatum > UNIX_TIMESTAMP(NOW()) ORDER BY startdatum ASC)
|
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst Di 30.03.2010 19:04
Titel
|
|
|
http://dev.mysql.com/doc/refman/5.1/de/union.html
Zitat: | Um ORDER BY oder LIMIT auf eine einzelne SELECT-Anweisung anzuwenden, setzen Sie die Klausel mit in die Klammern, die die SELECT-Anweisung umschließen: |
Code: | (SELECT a FROM tbl_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM tbl_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
|
Ergibt:
Code: | (SELECT * FROM tabelle WHERE startdatum < UNIX_TIMESTAMP(NOW()) LIMIT 1)
UNION
(SELECT * FROM tabelle WHERE startdatum > UNIX_TIMESTAMP(NOW()) ORDER BY startdatum ASC) |
Außerdem solltest du in einem SELECT statement keine Datumsfunktionen nutzen,
da so der Query Cache nicht genutzt werden kann. Ermittle also den timestamp zuvor
per PHP und vergleiche gegen diesen …
http://www.php.net/manual/de/function.mktime.php
Code: | $timestamp = mktime(date("H"), date("i"), date("s"), date("n"), date("j"), date("Y") ); |
Zuletzt bearbeitet von m am Mi 31.03.2010 08:54, insgesamt 2-mal bearbeitet
|
|
|
|
|
Topper23
Threadersteller
Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht:
|
Verfasst Mi 31.03.2010 07:27
Titel
|
|
|
Danke m,
genau das habe ich auch gestern abend noch rausgefunden man wie doof kann man sein diese blöden Klammern nicht zu setzen... Naja, hinterher ist man immer schlauer.
Eine Kleinigkeit ist für meine Abfrage allerdings noch sehr wichtig, was du nicht berücksichtig hast. Die erste SELECT muss ein "ORDER BY startdatum DESC" bekommen, damit ich auch tatsächlich den aktuellsten veralteten Eintrag bekomme und nicht den allerersten.
Code: | (SELECT * FROM tabelle WHERE startdatum <= UNIX_TIMESTAMP(NOW()) ORDER BY startdatum DESC LIMIT 1)
UNION ALL
(SELECT * FROM tabelle WHERE startdatum > UNIX_TIMESTAMP(NOW())) ODER BY startdatum ASC |
DANKE für eure Hilfe - ihr seid die Besten.
|
|
|
|
|
|
|
|
Ähnliche Themen |
SUCHE Logo von Europäischen Union "Europa fördert Niedersach
Formmailer-Problem-neues problem
CSS Problem
PHP Problem
CSS-Problem im IE7
SQL-Problem
|
|