mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 02:58 Benutzername: Passwort: Auto-Login

Thema: SQL UNION Problem vom 30.03.2010


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> SQL UNION Problem
Autor Nachricht
Topper23
Threadersteller

Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht: Männlich
Verfasst Di 30.03.2010 13:09
Titel

SQL UNION Problem

Antworten mit Zitat Zum Seitenanfang

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. Lächel

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. *Schnief*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
pixelpapst303

Dabei seit: 06.07.2006
Ort: hamburg
Alter: 50
Geschlecht: Männlich
Verfasst Di 30.03.2010 13:33
Titel

Antworten mit Zitat Zum Seitenanfang

mach zwei querys draus...
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Anzeige
Anzeige
Topper23
Threadersteller

Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht: Männlich
Verfasst Di 30.03.2010 14:04
Titel

Re: SQL UNION Problem

Antworten mit Zitat Zum Seitenanfang

ööö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. *Schnief*

wie denn?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Skyw4lker

Dabei seit: 30.08.2004
Ort: Bergisch Gladbach
Alter: 43
Geschlecht: Männlich
Verfasst Di 30.03.2010 14:18
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
Topper23
Threadersteller

Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht: Männlich
Verfasst Di 30.03.2010 15:01
Titel

Antworten mit Zitat Zum Seitenanfang

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?
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
leinich

Dabei seit: 23.09.2008
Ort: -
Alter: -
Geschlecht: -
Verfasst Di 30.03.2010 16:31
Titel

Antworten mit Zitat Zum Seitenanfang

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)
  View user's profile Private Nachricht senden
m
Moderator

Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst Di 30.03.2010 19:04
Titel

Antworten mit Zitat Zum Seitenanfang

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Topper23
Threadersteller

Dabei seit: 23.01.2009
Ort: Aachen
Alter: -
Geschlecht: Männlich
Verfasst Mi 31.03.2010 07:27
Titel

Antworten mit Zitat Zum Seitenanfang

Danke m,

genau das habe ich auch gestern abend noch rausgefunden man wie doof kann man sein diese blöden Klammern nicht zu setzen... Lächel 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


* Applaus, Applaus *
DANKE für eure Hilfe - ihr seid die Besten.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ä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
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.